Sample code for 30+ languages & platforms
Visual FoxPro

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 Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loJsonToken
LOCAL loGAuth
LOCAL loRest
LOCAL lnBAutoReconnect
LOCAL loSbPath
LOCAL lnNumReplacements
LOCAL loPngData
LOCAL loSbResponseBody

lnSuccess = 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

loJsonToken = CreateObject('Chilkat.JsonObject')
lnSuccess = loJsonToken.LoadFile("qa_data/tokens/googleContacts.json")
IF (lnSuccess <> 1) THEN
    ? "Failed to load googleContacts.json"
    RELEASE loJsonToken
    CANCEL
ENDIF

loGAuth = CreateObject('Chilkat.AuthGoogle')
loGAuth.AccessToken = loJsonToken.StringOf("access_token")

loRest = CreateObject('Chilkat.Rest')

* Connect using TLS.
lnBAutoReconnect = 1
lnSuccess = loRest.Connect("www.google.com",443,1,lnBAutoReconnect)

* Provide the authentication credentials (i.e. the access token)
loRest.SetAuthGoogle(loGAuth)

* ----------------------------------------------
* 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]

loRest.AddHeader("GData-Version","3.0")
loRest.AddHeader("If-Match","*")
loRest.AddHeader("Content-Type","image/*")

loSbPath = CreateObject('Chilkat.StringBuilder')
loSbPath.Append("/m8/feeds/photos/media/default/{contactId}")
* Upload a photo for the contact having contactId = "1ea2e4fe0ef24e09"
lnNumReplacements = loSbPath.Replace("{contactId}","1ea2e4fe0ef24e09")

* Let's get our photo data..
loPngData = CreateObject('Chilkat.BinData')
lnSuccess = loPngData.LoadFile("qa_data/png/dude.png")

loSbResponseBody = CreateObject('Chilkat.StringBuilder')
lnSuccess = loRest.FullRequestBd("PUT",loSbPath.GetAsString(),loPngData,loSbResponseBody)
IF (lnSuccess <> 1) THEN
    ? loRest.LastErrorText
    RELEASE loJsonToken
    RELEASE loGAuth
    RELEASE loRest
    RELEASE loSbPath
    RELEASE loPngData
    RELEASE loSbResponseBody
    CANCEL
ENDIF

* A successful response will have a status code equal to 200.
IF (loRest.ResponseStatusCode <> 200) THEN
    ? "response status code = " + STR(loRest.ResponseStatusCode)
    ? "response status text = " + loRest.ResponseStatusText
    ? "response header: " + loRest.ResponseHeader
    ? "response body: " + loSbResponseBody.GetAsString()
    RELEASE loJsonToken
    RELEASE loGAuth
    RELEASE loRest
    RELEASE loSbPath
    RELEASE loPngData
    RELEASE loSbResponseBody
    CANCEL
ENDIF

* If the 200 success response was received.
? "Response Body:"
? loSbResponseBody.GetAsString()
? "Success."

RELEASE loJsonToken
RELEASE loGAuth
RELEASE loRest
RELEASE loSbPath
RELEASE loPngData
RELEASE loSbResponseBody