Read Google Contacts
Updated: Sep 17, 2023
This example accesses and retrieves Google Contacts data. It streamlines the process of extracting and managing contact information stored in Google accounts. Some use-cases include synchronizing contacts with CRM systems, automating email marketing campaigns based on contact data, and enhancing customer relationship management by accessing and updating contact information from Google Contacts.
Java Code Listing
package com.northconcepts.datapipeline.examples.google.contacts; import java.io.File; import java.io.InputStreamReader; import java.util.Collections; import java.util.List; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.gson.GsonFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.services.people.v1.PeopleServiceScopes; import com.northconcepts.datapipeline.core.DataReader; import com.northconcepts.datapipeline.core.DataWriter; import com.northconcepts.datapipeline.core.LimitReader; import com.northconcepts.datapipeline.core.StreamWriter; import com.northconcepts.datapipeline.google.contacts.GoogleContactsReader; import com.northconcepts.datapipeline.job.Job; public class ReadGoogleContacts { private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance(); private static final String TOKENS_DIRECTORY_PATH = "tokens/contacts"; private static final ListSCOPES = Collections.singletonList(PeopleServiceScopes.CONTACTS_READONLY); private static final String CLIENT_SECRET = "/integrations.json"; private static final String APPLICATION_NAME = "GoogleContactsScratch"; private static final int MAX_RESULTS = 10; private static final String PERSON_FIELDS = "names,emailAddresses,phoneNumbers"; private static final String RESOURCE = "people/me"; /** Authorizes the installed application to access user's protected data. */ private static Credential authorize(NetHttpTransport httpTransport) throws Throwable { // load client secrets GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(ReadGoogleContacts.class.getResourceAsStream(CLIENT_SECRET))); // set up authorization code flow GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( httpTransport, JSON_FACTORY, clientSecrets, SCOPES) .setDataStoreFactory(new FileDataStoreFactory(new File(TOKENS_DIRECTORY_PATH))) .setAccessType("offline") .build(); // authorize LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build(); return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user"); } public static void main(String[] args) throws Throwable { NetHttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); DataReader reader = new GoogleContactsReader(authorize(httpTransport), httpTransport) .setPersonFields(PERSON_FIELDS) .setBatchSize(MAX_RESULTS) .setApplicationName(APPLICATION_NAME); reader = new LimitReader(reader, MAX_RESULTS); DataWriter writer = StreamWriter.newSystemOutWriter(); Job.run(reader, writer); } }
Code Walkthrough
authorize()
method authorizes the installed application to access the user's protected data. First, the client secret (i.e. your service account credentials created in the Google Developer Console) is loaded usingGoogleClientSecrets.load()
method. Next, the authorization code flow is set up, and, finally, the application is authorized to retrieve data from Google API.- NetHttpTransport instance is created for thread-safe HTTP low-level transport.
- GoogleContactsReader uses an API to get contacts from a Google account. The constructor of the instance accepts
Credential
andHttpTransport
. Additional parameters such as person fields, batch size, and application name are specified using corresponding methods. - LimitReader is created to limit the number of records in a reader.
StreamWriter.newSystemOutWriter()
method is used to create DataWriter instance.- Job.run() method is used to transfer the data from
reader
towriter
to print out the records on the console. See how to compile and run data pipeline jobs.