Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Tcl) Page Through All ContactsDemonstrates how to page through the entire list of Google Contacts.
load ./chilkat.dll # 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 set jsonToken [new_CkJsonObject] set success [CkJsonObject_LoadFile $jsonToken "qa_data/tokens/googleContacts.json"] if {$success != 1} then { puts "Failed to load googleContacts.json" delete_CkJsonObject $jsonToken exit } set gAuth [new_CkAuthGoogle] CkAuthGoogle_put_AccessToken $gAuth [CkJsonObject_stringOf $jsonToken "access_token"] set rest [new_CkRest] # Connect using TLS. set bAutoReconnect 1 set success [CkRest_Connect $rest "www.google.com" 443 1 $bAutoReconnect] # Provide the authentication credentials (i.e. the access token) CkRest_SetAuthGoogle $rest $gAuth # ---------------------------------------------- # OK, the REST connection setup is completed.. # ---------------------------------------------- set startIndex 1 set maxResults 25 # The totalResults will get updated with the correct value in the 1st loop iteration.. set totalResults 100 # To retrieve the contacts in pages of 25 each, we need to send the following for each page. # GET /m8/feeds/contacts/default/full?max-results=25&start-index=<startIndex> # GData-Version: 3.0 set sbMaxResults [new_CkStringBuilder] CkStringBuilder_AppendInt $sbMaxResults $maxResults set sbStartIndex [new_CkStringBuilder] set loopIteration 0 while {$startIndex <= $totalResults} { CkStringBuilder_Clear $sbStartIndex CkStringBuilder_AppendInt $sbStartIndex $startIndex CkRest_ClearAllHeaders $rest CkRest_ClearAllQueryParams $rest CkRest_AddHeader $rest "GData-Version" "3.0" CkRest_AddQueryParam $rest "start-index" [CkStringBuilder_getAsString $sbStartIndex] CkRest_AddQueryParam $rest "max-results" [CkStringBuilder_getAsString $sbMaxResults] set sbResponseBody [new_CkStringBuilder] set success [CkRest_FullRequestNoBodySb $rest "GET" "/m8/feeds/contacts/default/full" $sbResponseBody] if {$success != 1} then { puts [CkRest_lastErrorText $rest] delete_CkJsonObject $jsonToken delete_CkAuthGoogle $gAuth delete_CkRest $rest delete_CkStringBuilder $sbMaxResults delete_CkStringBuilder $sbStartIndex delete_CkStringBuilder $sbResponseBody exit } # A successful response will have a status code equal to 200. if {[CkRest_get_ResponseStatusCode $rest] != 200} then { puts "response status code = [CkRest_get_ResponseStatusCode $rest]" puts "response status text = [CkRest_responseStatusText $rest]" puts "response header: [CkRest_responseHeader $rest]" puts "response body: [CkStringBuilder_getAsString $sbResponseBody]" delete_CkJsonObject $jsonToken delete_CkAuthGoogle $gAuth delete_CkRest $rest delete_CkStringBuilder $sbMaxResults delete_CkStringBuilder $sbStartIndex delete_CkStringBuilder $sbResponseBody exit } # If the 200 response was received, then the contacts XML is contained # in the response body. set xml [new_CkXml] CkXml_LoadSb $xml $sbResponseBody 0 # Now let's parse the XML... # Get the the total number of results, the start index, and the items per page. # We'll likely NOT get the full list, but will instead get the 1st page. set totalResults [CkXml_GetChildIntValue $xml "openSearch:totalResults"] set startIndex2 [CkXml_GetChildIntValue $xml "openSearch:startIndex"] set itemsPerPage [CkXml_GetChildIntValue $xml "openSearch:itemsPerPage"] puts "totalResults = $totalResults" puts "startIndex = $startIndex2" puts "itemsPerPage = $itemsPerPage" # Iterate over each contact. set numEntries [CkXml_NumChildrenHavingTag $xml "entry"] set i 0 while {$i < $numEntries} { CkXml_put_I $xml $i puts [expr [expr $loopIteration * $maxResults] + [expr $i + 1]] ---- puts "title: [CkXml_getChildContent $xml {entry[i]|title}]" set idUrl [CkXml_getChildContent $xml "entry[i]|id"] puts "id: $idUrl" set fullName [CkXml_chilkatPath $xml "entry[i]|gd:name|gd:fullName|*"] if {[CkXml_get_LastMethodSuccess $xml] == 1} then { puts "fullName: $fullName" } set emailAddress [CkXml_chilkatPath $xml "entry[i]|gd:email|(address)"] if {[CkXml_get_LastMethodSuccess $xml] == 1} then { puts "email address: $emailAddress" } # Find the photo link and check to see if this contact has a photo. # xLink is a CkXml set xLink [CkXml_GetChildWithAttr $xml "link" "rel" "http://schemas.google.com/contacts/2008/rel#photo"] if {[CkXml_get_LastMethodSuccess $xml] == 1} then { # Get the photo etag. set bHasPhoto [CkXml_HasAttribute $xLink "gd:etag"] if {$bHasPhoto == 1} then { puts "This contact has a photo." } delete_CkXml $xLink } set i [expr $i + 1] } set startIndex [expr $startIndex + $maxResults] set loopIteration [expr $loopIteration + 1] } delete_CkJsonObject $jsonToken delete_CkAuthGoogle $gAuth delete_CkRest $rest delete_CkStringBuilder $sbMaxResults delete_CkStringBuilder $sbStartIndex delete_CkStringBuilder $sbResponseBody delete_CkXml $xml |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.