Zig
Zig
Refinitiv World-Check One - Get Top Level Groups
See more Refinitiv Examples
Sends a signed GET request to get the top level groups.Note: This example requires Chilkat v9.5.0.89 or later.
Chilkat Zig Downloads
const std = @import("std");
const chilkat = @import("chilkat");
pub fn main(init: std.process.Init) !void {
const alloc = init.arena.allocator();
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
const json = try chilkat.JsonObject.init();
defer json.deinit();
// Create the following JSON:
//
// {
// "keyId": "aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
// "hmacKey": "xxxxzI3vi58xxxCBxxx1+P/d8tGxx7KuLqN/KMPNxxxxekhj8/bx83+1YQSUxxxxYyv939ceY06GvhYRKmxxxx==",
// "algorithm": "hmac-sha256",
// "headers": [
// "(request-target)",
// "host",
// "date"
// ]
// }
// Substitute your actual API key and API secret in place of "api-key" and "api-secret"
json.updateString("keyId", "api-key") catch {};
json.updateString("hmacKey", "api-secret") catch {};
json.updateString("algorithm", "hmac-sha256") catch {};
// Indicate the names of the headers to be included in the signature.
// "(request-target)" is not actually a header name, but is a special name for HTTP signatures.
// Copy the following three lines of code exactly as-is.
// Do not replace "host", "date", or "(request-target)" with values.
json.updateString("headers[0]", "(request-target)") catch {};
json.updateString("headers[1]", "host") catch {};
json.updateString("headers[2]", "date") catch {};
const http = try chilkat.Http.init();
defer http.deinit();
// Setting the AuthSignature property causes the following header to be computed and added:
// Authorization: Signature keyId="...", algorithm="hmac-sha256", headers="(request-target) host date", signature="..."
http.setAuthSignature(try json.emit(alloc));
http.setRequestHeader("Cache-Control", "no-cache");
// Chilkat will auto-add the Date header because it's needed by the HTTP Signature.
const response_json = http.quickGetStr(alloc, "https://api-worldcheck.refinitiv.com/v2/groups") catch {
std.debug.print("{s}\n", .{try http.getLastErrorText(alloc)});
return;
};
std.debug.print("{s}\n", .{response_json});
std.debug.print("----\n", .{});
// A 200 status code indicates success.
std.debug.print("Status code = {d}\n", .{http.getLastStatus()});
// Successful JSON looks like this:
// [
// {
// "id": "...",
// "name": "Company Name",
// "parentId": null,
// "hasChildren": false,
// "status": "ACTIVE",
// "children": []
// }
// ]
// Use this online tool to generate parsing code from sample JSON:
// Generate Parsing Code from JSON
const jarr = try chilkat.JsonArray.init();
defer jarr.deinit();
try jarr.load(response_json);
var id: [:0]const u8 = "";
var name: [:0]const u8 = "";
var parent_id: [:0]const u8 = "";
var has_children: bool = false;
var status: [:0]const u8 = "";
var j: i32 = 0;
var count_j: i32 = 0;
var i: i32 = 0;
const count_i = jarr.getSize();
while (i < count_i) {
const json_obj = try jarr.objectAt(i);
defer json_obj.deinit();
id = try json_obj.stringOf(alloc, "id");
name = try json_obj.stringOf(alloc, "name");
parent_id = try json_obj.stringOf(alloc, "parentId");
has_children = json_obj.boolOf("hasChildren");
status = try json_obj.stringOf(alloc, "status");
j = 0;
count_j = json_obj.sizeOfArray("children");
while (j < count_j) {
json_obj.setJ(j);
j = j + 1;
}
i = i + 1;
}
}