PureBasic
PureBasic
Google Contacts - Retrieve as JSON
See more Google APIs Examples
Demonstrates how to retrieve Google Contacts as JSON.Chilkat PureBasic Downloads
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkAuthGoogle.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkJsonObject.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
; --------------------------------------------------------------------------------------------------------
; Note: The code for setting up the Chilkat REST object and making the initial connection can be done once.
; Once connected, the REST object may be re-used for many REST API calls.
; (It's a good idea to put the connection setup code in a separate function/subroutine.)
; --------------------------------------------------------------------------------------------------------
; It is assumed we previously obtained an OAuth2 access token.
; This example loads the JSON access token file
; saved by this example: Get Google Contacts OAuth2 Access Token
jsonToken.i = CkJsonObject::ckCreate()
If jsonToken.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkJsonObject::ckLoadFile(jsonToken,"qa_data/tokens/googleContacts.json")
If success <> 1
Debug "Failed to load googleContacts.json"
CkJsonObject::ckDispose(jsonToken)
ProcedureReturn
EndIf
gAuth.i = CkAuthGoogle::ckCreate()
If gAuth.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkAuthGoogle::setCkAccessToken(gAuth, CkJsonObject::ckStringOf(jsonToken,"access_token"))
rest.i = CkRest::ckCreate()
If rest.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Connect using TLS.
bAutoReconnect.i = 1
success = CkRest::ckConnect(rest,"www.google.com",443,1,bAutoReconnect)
; Provide the authentication credentials (i.e. the access token)
CkRest::ckSetAuthGoogle(rest,gAuth)
; ----------------------------------------------
; OK, the REST connection setup is completed..
; ----------------------------------------------
; To retrieve the contacts, we need to send the following:
; GET /m8/feeds/contacts/default/full
; GData-Version: 3.0
; To get the contacts data in JSON format, set the "alt" query parameter to "json"
CkRest::ckAddQueryParam(rest,"alt","json")
CkRest::ckAddHeader(rest,"GData-Version","3.0")
sbResponseBody.i = CkStringBuilder::ckCreate()
If sbResponseBody.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkRest::ckFullRequestNoBodySb(rest,"GET","/m8/feeds/contacts/default/full",sbResponseBody)
If success <> 1
Debug CkRest::ckLastErrorText(rest)
CkJsonObject::ckDispose(jsonToken)
CkAuthGoogle::ckDispose(gAuth)
CkRest::ckDispose(rest)
CkStringBuilder::ckDispose(sbResponseBody)
ProcedureReturn
EndIf
; A successful response will have a status code equal to 200.
If CkRest::ckResponseStatusCode(rest) <> 200
Debug "response status code = " + Str(CkRest::ckResponseStatusCode(rest))
Debug "response status text = " + CkRest::ckResponseStatusText(rest)
Debug "response header: " + CkRest::ckResponseHeader(rest)
Debug "response body: " + CkStringBuilder::ckGetAsString(sbResponseBody)
CkJsonObject::ckDispose(jsonToken)
CkAuthGoogle::ckDispose(gAuth)
CkRest::ckDispose(rest)
CkStringBuilder::ckDispose(sbResponseBody)
ProcedureReturn
EndIf
; If the 200 response was received, then the contacts JSON is contained
; in the response body.
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckLoadSb(json,sbResponseBody)
CkJsonObject::setCkEmitCompact(json, 0)
; Save the pretty-printed JSON response to a file.
CkStringBuilder::ckClear(sbResponseBody)
CkJsonObject::ckEmitSb(json,sbResponseBody)
CkStringBuilder::ckWriteFile(sbResponseBody,"qa_output/google_contacts.json","utf-8",0)
; Parse the Google Contacts JSON, and iterate over the contacts..
totalResults.i = CkJsonObject::ckIntOf(json,"feed.openSearch$totalResults.$t")
startIndex.i = CkJsonObject::ckIntOf(json,"feed.openSearch$startIndex.$t")
itemsPerPage.i = CkJsonObject::ckIntOf(json,"feed.openSearch$itemsPerPage.$t")
Debug "totalResults = " + Str(totalResults)
Debug "startIndex = " + Str(startIndex)
Debug "itemsPerPage = " + Str(itemsPerPage)
numEntries.i = CkJsonObject::ckSizeOfArray(json,"feed.entry")
i.i = 0
While i < numEntries
CkJsonObject::setCkI(json, i)
Debug Str(i + 1) + " ----"
Debug "title: " + CkJsonObject::ckStringOf(json,"feed.entry[i].title.$t")
fullName.s = CkJsonObject::ckStringOf(json,"feed.entry[i].gd$name.gd$fullName.$t")
If CkJsonObject::ckLastMethodSuccess(json) = 1
Debug "fullName: " + fullName
EndIf
; There can be multiple email addresses, so it's stored as a JSON array..
numEmailAddresses.i = CkJsonObject::ckSizeOfArray(json,"feed.entry[i].gd$email")
j.i = 0
While j < numEmailAddresses
emailAddress.s = CkJsonObject::ckStringOf(json,"feed.entry[i].gd$email[j].address")
If CkJsonObject::ckLastMethodSuccess(json) = 1
Debug "email address: " + emailAddress
EndIf
j = j + 1
Wend
i = i + 1
Wend
; A sample Google Contacts JSON response:
; {
; "version": "1.0",
; "encoding": "UTF-8",
; "feed": {
; "xmlns": "http://www.w3.org/2005/Atom",
; "xmlns$openSearch": "http://a9.com/-/spec/opensearch/1.1/",
; "xmlns$gContact": "http://schemas.google.com/contact/2008",
; "xmlns$batch": "http://schemas.google.com/gdata/batch",
; "xmlns$gd": "http://schemas.google.com/g/2005",
; "gd$etag": "\"QHw5eTVSLyt7I2A9XRFaE0kNTwI.\"",
; "id": {
; "$t": "chilkat.support@gmail.com"
; },
; "updated": {
; "$t": "2016-11-17T01:57:41.221Z"
; },
; "category": [
; {
; "scheme": "http://schemas.google.com/g/2005#kind",
; "term": "http://schemas.google.com/contact/2008#contact"
; }
; ],
; "title": {
; "$t": "Chilkat Support's Contacts"
; },
; "link": [
; {
; "rel": "alternate",
; "type": "text/html",
; "href": "https://www.googleapis.com/"
; },
; {
; "rel": "http://schemas.google.com/g/2005#feed",
; "type": "application/atom+xml",
; "href": "https://www.googleapis.com/m8/feeds/contacts/chilkat.support%40gmail.com/full"
; },
; {
; "rel": "http://schemas.google.com/g/2005#post",
; "type": "application/atom+xml",
; "href": "https://www.googleapis.com/m8/feeds/contacts/chilkat.support%40gmail.com/full"
; },
; {
; "rel": "http://schemas.google.com/g/2005#batch",
; "type": "application/atom+xml",
; "href": "https://www.googleapis.com/m8/feeds/contacts/chilkat.support%40gmail.com/full/batch"
; },
; {
; "rel": "self",
; "type": "application/atom+xml",
; "href": "https://www.googleapis.com/m8/feeds/contacts/chilkat.support%40gmail.com/full?max-results=25&alt=json"
; },
; {
; "rel": "next",
; "type": "application/atom+xml",
; "href": "https://www.googleapis.com/m8/feeds/contacts/chilkat.support%40gmail.com/full?max-results=25&alt=json&start-index=26"
; }
; ],
; "author": [
; {
; "name": {
; "$t": "Chilkat Support"
; },
; "email": {
; "$t": "chilkat.support@gmail.com"
; }
; }
; ],
; "generator": {
; "version": "1.0",
; "uri": "http://www.google.com/m8/feeds",
; "$t": "Contacts"
; },
; "openSearch$totalResults": {
; "$t": "350"
; },
; "openSearch$startIndex": {
; "$t": "1"
; },
; "openSearch$itemsPerPage": {
; "$t": "25"
; },
; "entry": [
; {
; "id": {
; "$t": "http://www.google.com/m8/feeds/contacts/chilkat.support%40gmail.com/base/0"
; },
; "gd$etag": "\"SX8zcTVSLyt7I2A9WxBXFU4MQwI.\"",
; "updated": {
; "$t": "2010-01-26T20:07:48.189Z"
; },
; "app$edited": {
; "xmlns$app": "http://www.w3.org/2007/app",
; "$t": "2010-01-26T20:07:48.189Z"
; },
; "category": [
; {
; "scheme": "http://schemas.google.com/g/2005#kind",
; "term": "http://schemas.google.com/contact/2008#contact"
; }
; ],
; "title": {
; "$t": "Joe Sample"
; },
; "link": [
; {
; "rel": "http://schemas.google.com/contacts/2008/rel#photo",
; "type": "image/*",
; "href": "https://www.googleapis.com/m8/feeds/photos/media/chilkat.support%40gmail.com/0"
; },
; {
; "rel": "self",
; "type": "application/atom+xml",
; "href": "https://www.googleapis.com/m8/feeds/contacts/chilkat.support%40gmail.com/full/0"
; },
; {
; "rel": "edit",
; "type": "application/atom+xml",
; "href": "https://www.googleapis.com/m8/feeds/contacts/chilkat.support%40gmail.com/full/0"
; }
; ],
; "gd$name": {
; "gd$fullName": {
; "$t": "Joe Sample"
; },
; "gd$givenName": {
; "$t": "Joe"
; },
; "gd$familyName": {
; "$t": "Sample"
; }
; },
; "gd$email": [
; {
; "address": "somebody@gmail.com",
; "primary": "true",
; "rel": "http://schemas.google.com/g/2005#other"
; }
; ]
; },
; ... more entries ...
;
CkJsonObject::ckDispose(jsonToken)
CkAuthGoogle::ckDispose(gAuth)
CkRest::ckDispose(rest)
CkStringBuilder::ckDispose(sbResponseBody)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndProcedure