Sample code for 30+ languages & platforms
Ruby

Page Through All Contacts

See more Google APIs Examples

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

Chilkat Ruby Downloads

Ruby
require 'chilkat'

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 = Chilkat::CkJsonObject.new()
success = jsonToken.LoadFile("qa_data/tokens/googleContacts.json")
if (success != true)
    print "Failed to load googleContacts.json" + "\n";
    exit
end

gAuth = Chilkat::CkAuthGoogle.new()
gAuth.put_AccessToken(jsonToken.stringOf("access_token"))

rest = Chilkat::CkRest.new()

# 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 = Chilkat::CkStringBuilder.new()
sbMaxResults.AppendInt(maxResults)
sbStartIndex = Chilkat::CkStringBuilder.new()

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 = Chilkat::CkStringBuilder.new()
    success = rest.FullRequestNoBodySb("GET","/m8/feeds/contacts/default/full",sbResponseBody)
    if (success != true)
        print rest.lastErrorText() + "\n";
        exit
    end

    # A successful response will have a status code equal to 200.
    if (rest.get_ResponseStatusCode() != 200)
        print "response status code = " + rest.get_ResponseStatusCode().to_s() + "\n";
        print "response status text = " + rest.responseStatusText() + "\n";
        print "response header: " + rest.responseHeader() + "\n";
        print "response body: " + sbResponseBody.getAsString() + "\n";
        exit
    end

    # If the 200 response was received, then the contacts XML is contained
    # in the response body.
    xml = Chilkat::CkXml.new()
    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 = " + totalResults.to_s() + "\n";
    print "startIndex = " + startIndex2.to_s() + "\n";
    print "itemsPerPage = " + itemsPerPage.to_s() + "\n";

    # Iterate over each contact.
    numEntries = xml.NumChildrenHavingTag("entry")
    i = 0
    while i < numEntries
        xml.put_I(i)
        print (loopIteration * maxResults + i + 1).to_s() + " ----" + "\n";
        print "title: " + xml.getChildContent("entry[i]|title") + "\n";

        idUrl = xml.getChildContent("entry[i]|id")
        print "id: " + idUrl + "\n";

        fullName = xml.chilkatPath("entry[i]|gd:name|gd:fullName|*")
        if (xml.get_LastMethodSuccess() == true)
            print "fullName: " + fullName + "\n";
        end

        emailAddress = xml.chilkatPath("entry[i]|gd:email|(address)")
        if (xml.get_LastMethodSuccess() == true)
            print "email address: " + emailAddress + "\n";
        end

        # 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.get_LastMethodSuccess() == true)
            # Get the photo etag.
            bHasPhoto = xLink.HasAttribute("gd:etag")
            if (bHasPhoto == true)
                print "This contact has a photo." + "\n";
            end

        end

        i = i + 1
    end

    startIndex = startIndex + maxResults
    loopIteration = loopIteration + 1
end