Sample code for 30+ languages & platforms
C#

Page Through All Contacts

See more Google APIs Examples

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

Chilkat C# Downloads

C#
bool 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

Chilkat.JsonObject jsonToken = new Chilkat.JsonObject();
success = jsonToken.LoadFile("qa_data/tokens/googleContacts.json");
if (success != true) {
    Debug.WriteLine("Failed to load googleContacts.json");
    return;
}

Chilkat.AuthGoogle gAuth = new Chilkat.AuthGoogle();
gAuth.AccessToken = jsonToken.StringOf("access_token");

Chilkat.Rest rest = new Chilkat.Rest();

// Connect using TLS.
bool 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..
// ----------------------------------------------

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

Chilkat.StringBuilder sbMaxResults = new Chilkat.StringBuilder();
sbMaxResults.AppendInt(maxResults);
Chilkat.StringBuilder sbStartIndex = new Chilkat.StringBuilder();

int 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());

    Chilkat.StringBuilder sbResponseBody = new Chilkat.StringBuilder();
    success = rest.FullRequestNoBodySb("GET","/m8/feeds/contacts/default/full",sbResponseBody);
    if (success != true) {
        Debug.WriteLine(rest.LastErrorText);
        return;
    }

    // A successful response will have a status code equal to 200.
    if (rest.ResponseStatusCode != 200) {
        Debug.WriteLine("response status code = " + Convert.ToString(rest.ResponseStatusCode));
        Debug.WriteLine("response status text = " + rest.ResponseStatusText);
        Debug.WriteLine("response header: " + rest.ResponseHeader);
        Debug.WriteLine("response body: " + sbResponseBody.GetAsString());
        return;
    }

    // If the 200 response was received, then the contacts XML is contained
    // in the response body.
    Chilkat.Xml xml = new Chilkat.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");
    int startIndex2 = xml.GetChildIntValue("openSearch:startIndex");
    int itemsPerPage = xml.GetChildIntValue("openSearch:itemsPerPage");
    Debug.WriteLine("totalResults = " + Convert.ToString(totalResults));
    Debug.WriteLine("startIndex = " + Convert.ToString(startIndex2));
    Debug.WriteLine("itemsPerPage = " + Convert.ToString(itemsPerPage));

    // Iterate over each contact.
    int numEntries = xml.NumChildrenHavingTag("entry");
    int i = 0;
    while (i < numEntries) {
        xml.I = i;
        Debug.WriteLine(Convert.ToString(loopIteration * maxResults + i + 1) + " ----");
        Debug.WriteLine("title: " + xml.GetChildContent("entry[i]|title"));

        string idUrl = xml.GetChildContent("entry[i]|id");
        Debug.WriteLine("id: " + idUrl);

        string fullName = xml.ChilkatPath("entry[i]|gd:name|gd:fullName|*");
        if (xml.LastMethodSuccess == true) {
            Debug.WriteLine("fullName: " + fullName);
        }

        string emailAddress = xml.ChilkatPath("entry[i]|gd:email|(address)");
        if (xml.LastMethodSuccess == true) {
            Debug.WriteLine("email address: " + emailAddress);
        }

        // Find the photo link and check to see if this contact has a photo.
        Chilkat.Xml xLink = xml.GetChildWithAttr("link","rel","http://schemas.google.com/contacts/2008/rel#photo");
        if (xml.LastMethodSuccess == true) {
            // Get the photo etag.
            bool bHasPhoto = xLink.HasAttribute("gd:etag");
            if (bHasPhoto == true) {
                Debug.WriteLine("This contact has a photo.");
            }

        }

        i = i + 1;
    }

    startIndex = startIndex + maxResults;
    loopIteration = loopIteration + 1;
}