連絡先の読み取りと管理

People API の使用準備の手順を完了したら、連絡先の読み取りと管理を行うことができます。

次のコードサンプルは、いくつかの簡単なリクエストを送信する方法を示しています。メソッドの一覧については、リファレンス ドキュメントをご覧ください。

ユーザーの連絡先を一覧表示する

ユーザーの連絡先に登録されているユーザーのリストを取得するには、次のコードを使用します。

GET /v1/people/me/connections?personFields=names,emailAddresses HTTP/1.1
Host: people.googleapis.com
ListConnectionsResponse response = peopleService.people().connections().list("people/me")
   
.setPersonFields("names,emailAddresses")
   
.execute();
List<Person> people = response.getConnections();
people = people_service.people().connections()
   
.list('people/me', personFields='names,emailAddresses')
$people = $people_service->people_connections->listPeopleConnections(
   
'people/me', array('personFields' => 'names,emailAddresses'));
PeopleResource.ConnectionsResource.ListRequest peopleRequest =
    peopleService
.People.Connections.List("people/me");
peopleRequest
.PersonFields = "names,emailAddresses";
ListConnectionsResponse response = peopleRequest.Execute();
IList<Person> people = response.Connections;

変更されたユーザーの連絡先を一覧表示する

Java
// Initial request
ListConnectionsResponse fullSyncResponse = peopleService.people().connections().list("people/me")
   
.setPersonFields("metadata,names,emailAddresses")
   
.setRequestSyncToken(true)
   
.execute();
// Fetch all the pages
while (fullSyncResponse.getNextPageToken() != null) {
  fullSyncResponse
= peopleService.people().connections().list("people/me")
     
.setPersonFields("metadata,names,emailAddresses")
     
.setRequestSyncToken(true)
     
.setPageToken(fullSyncResponse.getNextPageToken())
     
.execute();
}

// Some time passes

// Fetch incremental changes using the sync token returned in the last fullSyncResponse.
try {
 
ListConnectionsResponse incrementalSyncResponse = peopleService.people().connections().list("people/me")
     
.setPersonFields("metadata,names,emailAddresses")
     
.setSyncToken(fullSyncResponse.getNextSyncToken())
     
.execute();
 
for (Person person : incrementalSyncResponse.getConnections()) {
    handlePerson
(person);
 
}

 
// Fetch all the pages
 
while (incrementalSyncResponse.getNextPageToken() != null) {
    incrementalSyncResponse
= peopleService.people().connections().list("people/me")
       
.setPersonFields("metadata,names,emailAddresses")
       
.setSyncToken(fullSyncResponse.getNextSyncToken())
       
.setPageToken(incrementalSyncResponse.getNextPageToken())
       
.execute();
   
for (Person person : incrementalSyncResponse.getConnections()) {
      handlePerson
(person);
   
}
 
}
} catch (GoogleJsonResponseException e) {
 
if (e.getStatusCode() == 410) {
   
// Sync token expired. Make full sync request.
 
}
}

void handlePerson(Person person) {
 
if (person.getMetadata().getDeleted()) {
   
// Handle deleted person
 
} else {
   
// Handle changed person
 
}
}

同期動作の詳細については、ListConnections をご覧ください。

お客様の連絡先を検索する

ユーザーのすべての連絡先を検索するには、次のコードを使用します。

プロトコルJava
// Warmup cache
GET
/v1/people:searchContacts?query=&readMask=names,emailAddresses HTTP/1.1
Host: people.googleapis.com



// Send search request after several seconds
GET
/v1/people:searchContacts?query=query&readMask=names,emailAddresses HTTP/1.1
Host: people.googleapis.com

// Warmup cache
SearchResponse response = peopleService.people().searchContacts()
   
.setQuery("")
   
.setReadMask("names,emailAddresses")
   
.execute();



// Wait a few seconds
Thread.sleep(5);



// Send search request
SearchResponse response = peopleService.people().searchContacts()
   
.setQuery("query")
   
.setReadMask("names,emailAddresses")
   
.execute();

新しい連絡先を作成

新しい連絡先を作成するには、次のコードを使用します。

プロトコルJava
POST /v1/people:createContact HTTP/1.1
Body: { "names": [{ "givenName": "John", "familyName": "Doe" }] }
Host: people.googleapis.com
Person contactToCreate = new Person();
List<Name> names = new ArrayList<>();
names
.add(new Name().setGivenName("John").setFamilyName("Doe"));
contactToCreate
.setNames(names);

Person createdContact = peopleService.people().createContact(contactToCreate).execute();

リクエストあたりの割り当て使用量

  • 1 件のクリティカルな読み取りリクエスト(連絡先とプロファイルの読み取り)
  • 1 件の重要な書き込みリクエスト(連絡先の作成と更新)
  • 1 日あたりの連絡先の書き込み(合計)

既存の連絡先を更新する

既存の連絡先を更新するには、更新する連絡先の person.metadata.sources.etag フィールドに、前回読み取ったときから連絡先が変更されていないことを確認するためのフィールドを含める必要があります。次のコードを使用します。

プロトコルJava
PATCH /v1/resource_name:updateContact?updatePersonFields=emailAddresses HTTP/1.1
Body: {
   
"resourceName": "resource_name",
   
"etag": "etag",
   
"emailAddresses": [{ "value": "john.doe@gmail.com" }],
}
Host: people.googleapis.com
Person contactToUpdate = peopleService.people().get("resource_name").execute();

List<EmailAddress> emailAddresses = new ArrayList<>();
emailAddresses
.add(new EmailAddress().setValue("john.doe@gmail.com"));
contactToUpdate
.setEmailAddresses(emailAddresses);

Person updatedContact = peopleService.people()
   
.updateContact(contactToUpdate.getResourceName(), contactToUpdate)
   
.setUpdatePersonFields("emailAddresses")
   
.execute();

リクエストあたりの割り当て使用量

  • 1 件のクリティカルな読み取りリクエスト(連絡先とプロファイルの読み取り)
  • 1 件の重要な書き込みリクエスト(連絡先の作成と更新)
  • 1 日あたりの連絡先の書き込み(合計)

既存の連絡先を削除する

既存の連絡先を削除するには、次のコードを使用します。

プロトコルJava
DELETE /v1/resource_name:deleteContact HTTP/1.1
Host: people.googleapis.com
peopleService.people().deleteContact("resource_name").execute();

リクエストあたりの割り当て使用量

  • 1 件の書き込みリクエスト(連絡先の削除と連絡先グループの書き込み)

新しい連絡先を一括作成する

新しい連絡先を一括作成するには、次のコードを使用します。

プロトコルJava
POST /v1/people:batchCreateContacts?readMask=names HTTP/1.1
Body: {
 
"contacts": [
   
{
     
"contactPerson": {
       
"names": [
         
{
           
"givenName": "John",
           
"familyName": "Doe"
         
}
       
]
     
}
   
}
 
]
}
Host: people.googleapis.com
Person person1 = new Person();
person1
.setNames(ImmutableList.of(new Name().setGivenName("John").setFamilyName("Doe")));
ContactToCreate contactToCreate1 = new ContactToCreate();
contactToCreate1
.setContactPerson(person1);

Person person2 = new Person();
person2
.setNames(ImmutableList.of(new Name().setGivenName("Bob").setFamilyName("Dylan")));
ContactToCreate contactToCreate2 = new ContactToCreate();
contactToCreate2
.setContactPerson(person2);

BatchCreateContactsRequest request = new BatchCreateContactsRequest();
request
.setContacts(ImmutableList.of(contactToCreate1, contactToCreate2)).setReadMask("names");

BatchCreateContactsResponse response =
    peopleService
.people().batchCreateContacts(request).execute();

リクエストあたりの割り当て使用量

  • 6 件の重要な読み取りリクエスト(連絡先とプロファイルの読み取り)
  • 6 件の重要な書き込みリクエスト(連絡先の作成と更新)
  • 1 日あたりの連絡先書き込み数(合計): 200 件

既存の連絡先を一括更新する

既存の連絡先を更新するには、更新する連絡先の各ユーザーに person.metadata.sources.etag フィールドを含めて、最後に読み取ったときから連絡先が変更されていないことを確認する必要があります。次のコードを使用します。

プロトコルJava
POST /v1/people:batchUpdateContacts?updateMask=names&readMask=names,emailAddresses HTTP/1.1
Body: {
 
"contacts": {
   
"resource_name": {
     
"emailAddresses": [
       
{
         
"value": "john.doe@gmail.com"
       
}
     
]
     
"etag": "etag"
   
}
 
}
}
Host: people.googleapis.com
Person contactToUpdate = peopleService.people().get("resource_name").execute();

contactToUpdate
.setNames(
   
ImmutableList.of(new Name().setGivenName("John").setFamilyName("Doe")));

BatchUpdateContactsRequest request = new BatchUpdateContactsRequest();
ImmutableMap<String, Person> map =
   
ImmutableMap.of(contactToUpdate.getResourceName(), contactToUpdate);
request
.setContacts(map).setUpdateMask("names").setReadMask("names,emailAddresses");

BatchUpdateContactsResponse response =
    peopleService
.people().batchUpdateContacts(request).execute();

リクエストあたりの割り当て使用量

  • 6 件の重要な読み取りリクエスト(連絡先とプロファイルの読み取り)
  • 6 件の重要な書き込みリクエスト(連絡先の作成と更新)
  • 1 日あたりの連絡先書き込み数(合計): 200 件

既存の連絡先を一括削除する

既存の連絡先を一括削除するには、次のコードを使用します。

プロトコルJava
POST /v1/people:batchDeleteContacts HTTP/1.1
Body: {"resource_names": ["resource_name"]}
Host: people.googleapis.com
BatchDeleteContactsRequest request = new BatchDeleteContactsRequest();

request
.setResourceNames(ImmutableList.of(resource_name));

peopleService
.people().batchDeleteContacts(request).execute();

リクエストあたりの割り当て使用量

  • 10 件の書き込みリクエスト(連絡先の削除と連絡先グループの書き込み)