Visual FoxPro
Visual FoxPro
Update a Google Contact
See more Google APIs Examples
Demonstrates how to update a Google Contact.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loJsonToken
LOCAL loGAuth
LOCAL loRest
LOCAL lnBAutoReconnect
LOCAL loSbPath
LOCAL lnNumReplacements
LOCAL loSbResponseBody
LOCAL loXml
LOCAL lcLastKnownEtag
LOCAL loSbRequestBody
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 update a contact, we'll first get the contact information,
* then we'll make changes to the XML and then PUT the update.
* To retrieve the contact, send the following:
* GET /m8/feeds/contacts/default/full/{contactId}
* GData-Version: 3.0
loRest.AddHeader("GData-Version","3.0")
loSbPath = CreateObject('Chilkat.StringBuilder')
loSbPath.Append("/m8/feeds/contacts/default/full/{contactId}")
* Get the contact having contactId = "5b6d64980b1ed462"
lnNumReplacements = loSbPath.Replace("{contactId}","5b6d64980b1ed462")
loSbResponseBody = CreateObject('Chilkat.StringBuilder')
lnSuccess = loRest.FullRequestNoBodySb("GET",loSbPath.GetAsString(),loSbResponseBody)
IF (lnSuccess <> 1) THEN
? loRest.LastErrorText
RELEASE loJsonToken
RELEASE loGAuth
RELEASE loRest
RELEASE loSbPath
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 loSbResponseBody
CANCEL
ENDIF
* If the 200 response was received, then the contacts XML is contained
* in the response body.
loXml = CreateObject('Chilkat.Xml')
loXml.LoadSb(loSbResponseBody,0)
* Get the etag:
lcLastKnownEtag = loXml.GetAttrValue("gd:etag")
? "lastKnownEtag = " + lcLastKnownEtag
* Update the XML.
* We're going to add or update with the following information:
* <gd:name>
* <gd:givenName>Joe</gd:givenName>
* <gd:familyName>Sample</gd:familyName>
* <gd:fullName>Joe Sample</gd:fullName>
* </gd:name>
* <content type="text">RIP Joe Sample, a great musician...</content>
* <gd:extendedProperty name="pet" value="hamster"/>
loXml.UpdateChildContent("gd:name|gd:givenName","Joe")
loXml.UpdateChildContent("gd:name|gd:familyName","Sample")
loXml.UpdateChildContent("gd:name|gd:fullName","Joe Sample")
loXml.UpdateChildContent("content","RIP Joe Sample, a great musician...")
loXml.UpdateAttrAt("content",1,"type","text")
loXml.UpdateAttrAt("gd:extendedProperty",1,"name","pet")
loXml.UpdateAttrAt("gd:extendedProperty",1,"value","hamster")
* Send the following:
* PUT /m8/feeds/contacts/default/full/{contactId}
* If-Match: {lastKnownEtag}
* GData-Version: 3.0
* Content-Type: application/atom+xml
loRest.ClearAllHeaders()
loRest.AddHeader("If-Match",lcLastKnownEtag)
loRest.AddHeader("GData-Version","3.0")
loRest.AddHeader("Content-Type","application/atom+xml")
loSbRequestBody = CreateObject('Chilkat.StringBuilder')
loXml.GetXmlSb(loSbRequestBody)
* The sbPath already contains the correct path..
lnSuccess = loRest.FullRequestSb("PUT",loSbPath.GetAsString(),loSbRequestBody,loSbResponseBody)
IF (lnSuccess <> 1) THEN
? loRest.LastErrorText
RELEASE loJsonToken
RELEASE loGAuth
RELEASE loRest
RELEASE loSbPath
RELEASE loSbResponseBody
RELEASE loXml
RELEASE loSbRequestBody
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 loSbResponseBody
RELEASE loXml
RELEASE loSbRequestBody
CANCEL
ENDIF
* If the 200 response was received, then the updated contact XML is contained
* in the response body.
loXml.LoadSb(loSbResponseBody,0)
? "Response Body:"
? loXml.GetXml()
? "Success."
RELEASE loJsonToken
RELEASE loGAuth
RELEASE loRest
RELEASE loSbPath
RELEASE loSbResponseBody
RELEASE loXml
RELEASE loSbRequestBody