I want to retrieve my contacts names, email address and phone numbers using the Google People API and I\'m using their Try it! tool to test the API.
The name
You have to use people.connections.list to fetch the list of contacts, then loop over them and use people.get in order to fetch each individual contact. In my case I set pageSize to 50 and then I use people:batchGet (which supports up to 50 resource names at a time) to fetch the details for those 50 contacts.
User's phone numbers and other details will be fetched only if the user has added them to their Google profile.
If you are using Try this API tool and with 'resourceName = people/me', then :
After the consent is given by you, it will be able to fetch 'phoneNumbers' and 'addresses' for the logged in user.
If you want to access other user's profile or you are calling the API from any other source then:
the user must give permission to your app/website/program to access the requested information from his/her profile
you must include 'authorization' KEY in GET REQUEST HEADERS with VALUE "Bearer (OAuth accesstoken of the target user)" to get personal details from the target user's profile.
The OAuth accesstoken can be obtained directly from the user consent response or by exchanging refreshtoken for accesstoken.
Just to be clear — because it really wasn't to me — if you are constructing the GET
request yourself the query parameter for the request mask is requestMask.includeField
. The nested JSON is flattened to a keypath. So the complete connection list GET
request would be something like:
https://content-people.googleapis.com/v1/people/me/connections?requestMask.includeField=person.names,person.addresses,person.email_addresses,person.organizations,person.phone_numbers
Once you have credentials object saved somewhere. You can retrieve the phone numbers and other details by using following code. You just have to set the RequestMask
#get the credentials
cred_obj = OAuth2Credentials.new_from_json(credentials)
http = httplib2.Http()
#create service
people_service = build(serviceName='people', version='v1', http=cred_obj.authorize(http))
results = people_service.people().connections().list(resourceName='people/me',
requestMask_includeField='person.names,person.emailAddresses,person.phoneNumbers',
pageSize=160)
res = results.execute()
connections = res.get('connections', [])
for person in connections:
names = person.get('names', [])
phone_numbers = person.get('phoneNumbers', [])
if len(names) > 0:
name = names[0].get('displayName')
if len(phone_numbers)>0:
phone_no = phone_numbers[0].get('value')
print name, phone_no
I have found a solution. According to the Google People API docs omitting this RequestMask field will include all fields but that's not happening. In my case setting the RequestMask
field to person.names,person.emailAddresses,person.phoneNumbers
works.