PureBasic
PureBasic
Google Contacts - Adding/Updating a photo for a contact
See more Google APIs Examples
Demonstrates how to upload a photo for a Google Contact.Chilkat PureBasic Downloads
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkAuthGoogle.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkBinData.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 upload a photo for the contact, send the following:
; PUT /m8/feeds/photos/media/default/contactId
; If-match: Etag
; Content-Type: image/*
; ...
; [Photo data bytes]
CkRest::ckAddHeader(rest,"GData-Version","3.0")
CkRest::ckAddHeader(rest,"If-Match","*")
CkRest::ckAddHeader(rest,"Content-Type","image/*")
sbPath.i = CkStringBuilder::ckCreate()
If sbPath.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkStringBuilder::ckAppend(sbPath,"/m8/feeds/photos/media/default/{contactId}")
; Upload a photo for the contact having contactId = "1ea2e4fe0ef24e09"
numReplacements.i = CkStringBuilder::ckReplace(sbPath,"{contactId}","1ea2e4fe0ef24e09")
; Let's get our photo data..
pngData.i = CkBinData::ckCreate()
If pngData.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkBinData::ckLoadFile(pngData,"qa_data/png/dude.png")
sbResponseBody.i = CkStringBuilder::ckCreate()
If sbResponseBody.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkRest::ckFullRequestBd(rest,"PUT",CkStringBuilder::ckGetAsString(sbPath),pngData,sbResponseBody)
If success <> 1
Debug CkRest::ckLastErrorText(rest)
CkJsonObject::ckDispose(jsonToken)
CkAuthGoogle::ckDispose(gAuth)
CkRest::ckDispose(rest)
CkStringBuilder::ckDispose(sbPath)
CkBinData::ckDispose(pngData)
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(sbPath)
CkBinData::ckDispose(pngData)
CkStringBuilder::ckDispose(sbResponseBody)
ProcedureReturn
EndIf
; If the 200 success response was received.
Debug "Response Body:"
Debug CkStringBuilder::ckGetAsString(sbResponseBody)
Debug "Success."
CkJsonObject::ckDispose(jsonToken)
CkAuthGoogle::ckDispose(gAuth)
CkRest::ckDispose(rest)
CkStringBuilder::ckDispose(sbPath)
CkBinData::ckDispose(pngData)
CkStringBuilder::ckDispose(sbResponseBody)
ProcedureReturn
EndProcedure