Sample code for 30+ languages & platforms
Chilkat2-Python

Page Through All Contacts

See more Google APIs Examples

Demonstrates how to page through the entire list of Google Contacts.

Chilkat Chilkat2-Python Downloads

Chilkat2-Python
import sys
import chilkat2

success = False

# 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 = chilkat2.JsonObject()
success = jsonToken.LoadFile("qa_data/tokens/googleContacts.json")
if (success != True):
    print("Failed to load googleContacts.json")
    sys.exit()

gAuth = chilkat2.AuthGoogle()
gAuth.AccessToken = jsonToken.StringOf("access_token")

rest = chilkat2.Rest()

# Connect using TLS.
bAutoReconnect = True
success = rest.Connect("www.google.com",443,True,bAutoReconnect)

# Provide the authentication credentials (i.e. the access token)
rest.SetAuthGoogle(gAuth)

# ----------------------------------------------
# OK, the REST connection setup is completed..
# ----------------------------------------------

startIndex = 1
maxResults = 25
# The totalResults will get updated with the correct value in the 1st loop iteration..
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

sbMaxResults = chilkat2.StringBuilder()
sbMaxResults.AppendInt(maxResults)
sbStartIndex = chilkat2.StringBuilder()

loopIteration = 0
while startIndex <= totalResults :

    sbStartIndex.Clear()
    sbStartIndex.AppendInt(startIndex)

    rest.ClearAllHeaders()
    rest.ClearAllQueryParams()
    rest.AddHeader("GData-Version","3.0")
    rest.AddQueryParam("start-index",sbStartIndex.GetAsString())
    rest.AddQueryParam("max-results",sbMaxResults.GetAsString())

    sbResponseBody = chilkat2.StringBuilder()
    success = rest.FullRequestNoBodySb("GET","/m8/feeds/contacts/default/full",sbResponseBody)
    if (success != True):
        print(rest.LastErrorText)
        sys.exit()

    # A successful response will have a status code equal to 200.
    if (rest.ResponseStatusCode != 200):
        print("response status code = " + str(rest.ResponseStatusCode))
        print("response status text = " + rest.ResponseStatusText)
        print("response header: " + rest.ResponseHeader)
        print("response body: " + sbResponseBody.GetAsString())
        sys.exit()

    # If the 200 response was received, then the contacts XML is contained
    # in the response body.
    xml = chilkat2.Xml()
    xml.LoadSb(sbResponseBody,False)

    # 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.
    totalResults = xml.GetChildIntValue("openSearch:totalResults")
    startIndex2 = xml.GetChildIntValue("openSearch:startIndex")
    itemsPerPage = xml.GetChildIntValue("openSearch:itemsPerPage")
    print("totalResults = " + str(totalResults))
    print("startIndex = " + str(startIndex2))
    print("itemsPerPage = " + str(itemsPerPage))

    # Iterate over each contact.
    numEntries = xml.NumChildrenHavingTag("entry")
    i = 0
    while i < numEntries :
        xml.I = i
        print(str(loopIteration * maxResults + i + 1) + " ----")
        print("title: " + xml.GetChildContent("entry[i]|title"))

        idUrl = xml.GetChildContent("entry[i]|id")
        print("id: " + idUrl)

        fullName = xml.ChilkatPath("entry[i]|gd:name|gd:fullName|*")
        if (xml.LastMethodSuccess == True):
            print("fullName: " + fullName)

        emailAddress = xml.ChilkatPath("entry[i]|gd:email|(address)")
        if (xml.LastMethodSuccess == True):
            print("email address: " + emailAddress)

        # Find the photo link and check to see if this contact has a photo.
        # xLink is a CkXml
        xLink = xml.GetChildWithAttr("link","rel","http://schemas.google.com/contacts/2008/rel#photo")
        if (xml.LastMethodSuccess == True):
            # Get the photo etag.
            bHasPhoto = xLink.HasAttribute("gd:etag")
            if (bHasPhoto == True):
                print("This contact has a photo.")

        i = i + 1

    startIndex = startIndex + maxResults
    loopIteration = loopIteration + 1