Google People API¶
Google People API is a service that provides access to information about profiles and contacts. The People class in gcp-pilot provides a high-level interface for interacting with Google People API.
Installation¶
To use the People API functionality, you need to install gcp-pilot:
Usage¶
Initialization¶
from gcp_pilot.people import People
# Initialize with a specific email
people = People(email="user@example.com")
# Initialize with service account impersonation
people = People(
email="user@example.com",
impersonate_account="service-account@project-id.iam.gserviceaccount.com"
)
The email parameter is required and specifies the user whose contacts will be accessed.
Getting People¶
You can retrieve people from the directory:
# Get all people in the directory
all_people = people.get_people()
for person in all_people:
print(f"Person: {person['names'][0]['displayName'] if 'names' in person else 'Unknown'}")
print(f"Email: {person['emailAddresses'][0]['value'] if 'emailAddresses' in person else 'Unknown'}")
# Search for people by query
search_results = people.get_people(query="John")
for person in search_results:
print(f"Person: {person['names'][0]['displayName'] if 'names' in person else 'Unknown'}")
print(f"Email: {person['emailAddresses'][0]['value'] if 'emailAddresses' in person else 'Unknown'}")
# Get specific fields for people
specific_fields = people.get_people(fields=["names", "emailAddresses", "phoneNumbers"])
for person in specific_fields:
print(f"Person: {person['names'][0]['displayName'] if 'names' in person else 'Unknown'}")
print(f"Email: {person['emailAddresses'][0]['value'] if 'emailAddresses' in person else 'Unknown'}")
if "phoneNumbers" in person:
print(f"Phone: {person['phoneNumbers'][0]['value']}")
Available Fields¶
The People API provides access to various fields of information about people. The USER_FIELDS constant in the people module lists all available fields:
The available fields include:
addresses: Postal addressesageRanges: Age rangesbiographies: Biographiesbirthdays: BirthdayscalendarUrls: Calendar URLsclientData: Client datacoverPhotos: Cover photosemailAddresses: Email addressesevents: EventsexternalIds: External IDsgenders: GendersimClients: IM clientsinterests: Interestslocales: Localeslocations: Locationsmemberships: Membershipsmetadata: MetadatamiscKeywords: Miscellaneous keywordsnames: Namesnicknames: Nicknamesoccupations: Occupationsorganizations: OrganizationsphoneNumbers: Phone numbersphotos: Photosrelations: RelationssipAddresses: SIP addressesskills: Skillsurls: URLsuserDefined: User-defined fields
You can specify which fields to retrieve by passing a list of field names to the fields parameter of the get_people method.
Example: Finding a Person by Email¶
from gcp_pilot.people import People
# Initialize the People API client
people = People(email="user@example.com")
# Search for a person by email
search_results = people.get_people(query="john@example.com", fields=["names", "emailAddresses"])
for person in search_results:
if "emailAddresses" in person:
for email in person["emailAddresses"]:
if email["value"].lower() == "john@example.com":
print(f"Found person: {person['names'][0]['displayName'] if 'names' in person else 'Unknown'}")
break
Example: Getting Organization Information¶
from gcp_pilot.people import People
# Initialize the People API client
people = People(email="user@example.com")
# Get organization information for people
org_info = people.get_people(fields=["names", "organizations"])
for person in org_info:
print(f"Person: {person['names'][0]['displayName'] if 'names' in person else 'Unknown'}")
if "organizations" in person:
for org in person["organizations"]:
print(f" Organization: {org.get('name', 'Unknown')}")
print(f" Title: {org.get('title', 'Unknown')}")
print(f" Department: {org.get('department', 'Unknown')}")
Error Handling¶
The People class handles common errors and converts them to more specific exceptions:
from gcp_pilot import exceptions
try:
people = People(email="user@example.com")
results = people.get_people(query="invalid query")
except exceptions.HttpError as e:
print(f"HTTP error: {e}")
except Exception as e:
print(f"Error: {e}")
Working with Service Account Impersonation¶
Service account impersonation allows you to act as a service account without having its key file. This is a more secure approach than downloading and storing service account keys.
# Initialize with service account impersonation
people = People(
email="user@example.com",
impersonate_account="service-account@project-id.iam.gserviceaccount.com"
)
# Now all operations will be performed as the impersonated service account
results = people.get_people()
For more information on service account impersonation, see the Authentication documentation.
Required Permissions¶
To use the People API, the service account or user must have the following permissions:
https://www.googleapis.com/auth/contacts: For read/write access to the user's contactshttps://www.googleapis.com/auth/directory.readonly: For read-only access to the user's domain directory
These permissions are automatically requested when you initialize the People class.
Domain-Wide Delegation¶
If you're using a service account to access the People API, you'll need to set up domain-wide delegation in your Google Workspace domain. This allows the service account to impersonate users in your domain.
For more information on setting up domain-wide delegation, see the Authentication documentation.