PureBasic
PureBasic
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 PureBasic Downloads
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonArray.pb"
IncludeFile "CkJsonObject.pb"
Procedure ChilkatExample()
success.i = 0
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; 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"
CkJsonObject::ckUpdateString(json,"keyId","api-key")
CkJsonObject::ckUpdateString(json,"hmacKey","api-secret")
CkJsonObject::ckUpdateString(json,"algorithm","hmac-sha256")
; 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.
CkJsonObject::ckUpdateString(json,"headers[0]","(request-target)")
CkJsonObject::ckUpdateString(json,"headers[1]","host")
CkJsonObject::ckUpdateString(json,"headers[2]","date")
http.i = CkHttp::ckCreate()
If http.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; 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="..."
CkHttp::setCkAuthSignature(http, CkJsonObject::ckEmit(json))
CkHttp::ckSetRequestHeader(http,"Cache-Control","no-cache")
; Chilkat will auto-add the Date header because it's needed by the HTTP Signature.
responseJson.s = CkHttp::ckQuickGetStr(http,"https://api-worldcheck.refinitiv.com/v2/groups")
If CkHttp::ckLastMethodSuccess(http) = 0
Debug CkHttp::ckLastErrorText(http)
CkJsonObject::ckDispose(json)
CkHttp::ckDispose(http)
ProcedureReturn
EndIf
Debug responseJson
Debug "----"
; A 200 status code indicates success.
Debug "Status code = " + Str(CkHttp::ckLastStatus(http))
; 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
jarr.i = CkJsonArray::ckCreate()
If jarr.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkJsonArray::ckLoad(jarr,responseJson)
jsonObj.i
id.s
name.s
parentId.s
hasChildren.i
status.s
j.i
count_j.i
i.i = 0
count_i.i = CkJsonArray::ckSize(jarr)
While i < count_i
jsonObj = CkJsonArray::ckObjectAt(jarr,i)
id = CkJsonObject::ckStringOf(jsonObj,"id")
name = CkJsonObject::ckStringOf(jsonObj,"name")
parentId = CkJsonObject::ckStringOf(jsonObj,"parentId")
hasChildren = CkJsonObject::ckBoolOf(jsonObj,"hasChildren")
status = CkJsonObject::ckStringOf(jsonObj,"status")
j = 0
count_j = CkJsonObject::ckSizeOfArray(jsonObj,"children")
While j < count_j
CkJsonObject::setCkJ(jsonObj, j)
j = j + 1
Wend
CkJsonObject::ckDispose(jsonObj)
i = i + 1
Wend
CkJsonObject::ckDispose(json)
CkHttp::ckDispose(http)
CkJsonArray::ckDispose(jarr)
ProcedureReturn
EndProcedure