Sample code for 30+ languages & platforms
PowerShell

Page Through All Contacts

See more Google APIs Examples

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

Chilkat PowerShell Downloads

PowerShell
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"

$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 = New-Object Chilkat.JsonObject
$success = $jsonToken.LoadFile("qa_data/tokens/googleContacts.json")
if ($success -ne $true) {
    $("Failed to load googleContacts.json")
    exit
}

$gAuth = New-Object Chilkat.AuthGoogle
$gAuth.AccessToken = $jsonToken.StringOf("access_token")

$rest = New-Object Chilkat.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 = New-Object Chilkat.StringBuilder
$sbMaxResults.AppendInt($maxResults)
$sbStartIndex = New-Object Chilkat.StringBuilder

$loopIteration = 0
while ($startIndex -le $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 = New-Object Chilkat.StringBuilder
    $success = $rest.FullRequestNoBodySb("GET","/m8/feeds/contacts/default/full",$sbResponseBody)
    if ($success -ne $true) {
        $($rest.LastErrorText)
        exit
    }

    # A successful response will have a status code equal to 200.
    if ($rest.ResponseStatusCode -ne 200) {
        $("response status code = " + $rest.ResponseStatusCode)
        $("response status text = " + $rest.ResponseStatusText)
        $("response header: " + $rest.ResponseHeader)
        $("response body: " + $sbResponseBody.GetAsString())
        exit
    }

    # If the 200 response was received, then the contacts XML is contained
    # in the response body.
    $xml = New-Object 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")
    $startIndex2 = $xml.GetChildIntValue("openSearch:startIndex")
    $itemsPerPage = $xml.GetChildIntValue("openSearch:itemsPerPage")
    $("totalResults = " + $totalResults)
    $("startIndex = " + $startIndex2)
    $("itemsPerPage = " + $itemsPerPage)

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

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

        $fullName = $xml.ChilkatPath("entry[i]|gd:name|gd:fullName|*")
        if ($xml.LastMethodSuccess -eq $true) {
            $("fullName: " + $fullName)
        }

        $emailAddress = $xml.ChilkatPath("entry[i]|gd:email|(address)")
        if ($xml.LastMethodSuccess -eq $true) {
            $("email address: " + $emailAddress)
        }

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

        }

        $i = $i + 1
    }

    $startIndex = $startIndex + $maxResults
    $loopIteration = $loopIteration + 1
}