Sample code for 30+ languages & platforms
Java

Page Through All Contacts

See more Google APIs Examples

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

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.AuthGoogle;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.JsonObject;
import com.chilkatsoft.chilkat2.Rest;
import com.chilkatsoft.chilkat2.StringBuilder;
import com.chilkatsoft.chilkat2.Xml;

public class ChilkatExample {

    public static void main(String[] args) {
        // 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

        JsonObject jsonToken = new JsonObject();
        try {
            jsonToken.loadFile("qa_data/tokens/googleContacts.json");
        } catch (ChilkatException e) {
            System.out.println("Failed to load googleContacts.json");
            return;
        }

        AuthGoogle gAuth = new AuthGoogle();
        gAuth.setAccessToken(jsonToken.stringOf("access_token"));

        Rest rest = new Rest();

        // Connect using TLS.
        boolean bAutoReconnect = true;
        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

        StringBuilder sbMaxResults = new StringBuilder();
        sbMaxResults.appendInt(maxResults);
        StringBuilder sbStartIndex = new 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());

            StringBuilder sbResponseBody = new StringBuilder();
            try {
                rest.fullRequestNoBodySb("GET", "/m8/feeds/contacts/default/full", sbResponseBody);
            } catch (ChilkatException e) {
                System.out.println(e.getLastErrorText());
                return;
            }

            // A successful response will have a status code equal to 200.
            if (rest.getResponseStatusCode() != 200) {
                System.out.println("response status code = " + rest.getResponseStatusCode());
                System.out.println("response status text = " + rest.getResponseStatusText());
                System.out.println("response header: " + rest.getResponseHeader());
                System.out.println("response body: " + sbResponseBody.getAsString());
                return;
            }

            // If the 200 response was received, then the contacts XML is contained
            // in the response body.
            Xml xml = new 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");
            System.out.println("totalResults = " + totalResults);
            System.out.println("startIndex = " + startIndex2);
            System.out.println("itemsPerPage = " + itemsPerPage);

            // Iterate over each contact.
            int numEntries = xml.numChildrenHavingTag("entry");
            int i = 0;
            while (i < numEntries) {
                xml.setI(i);
                System.out.println((loopIteration * maxResults + i + 1) + " ----");
                System.out.println("title: " + xml.getChildContent("entry[i]|title"));

                String idUrl = xml.getChildContent("entry[i]|id");
                System.out.println("id: " + idUrl);

                String fullName;
                try {
                    fullName = xml.chilkatPath("entry[i]|gd:name|gd:fullName|*");
                } catch (ChilkatException e) {
                    fullName = null;
                }
                if (fullName != null) {
                    System.out.println("fullName: " + fullName);
                }

                String emailAddress;
                try {
                    emailAddress = xml.chilkatPath("entry[i]|gd:email|(address)");
                } catch (ChilkatException e) {
                    emailAddress = null;
                }
                if (emailAddress != null) {
                    System.out.println("email address: " + emailAddress);
                }

                // Find the photo link and check to see if this contact has a photo.
                Xml xLink = xml.getChildWithAttr("link", "rel", "http://schemas.google.com/contacts/2008/rel#photo");
                if (xLink != null) {
                    // Get the photo etag.
                    boolean bHasPhoto = xLink.hasAttribute("gd:etag");
                    if (bHasPhoto) {
                        System.out.println("This contact has a photo.");
                    }

                    xLink.close();
                }

                i = i + 1;
            }

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