Odczytywanie kontaktów i zarządzanie nimi

Po wykonaniu czynności opisanych w artykule Przygotuj się do korzystania z interfejsu People API możesz odczytywać kontakty i nimi zarządzać.

Poniższe przykłady kodu pokazują, jak wysłać kilka prostych żądań. Pełną listę metod znajdziesz w dokumentacji referencyjnej.

Wyświetl listę kontaktów użytkownika

Aby pobrać listę osób z kontaktów użytkownika, użyj tego kodu:

Protokół

GET /v1/people/me/connections?personFields=names,emailAddresses HTTP/1.1
Host: people.googleapis.com

Java

ListConnectionsResponse response = peopleService.people().connections().list("people/me")
    .setPersonFields("names,emailAddresses")
    .execute();
List<Person> people = response.getConnections();

Python

people = people_service.people().connections()
    .list('people/me', personFields='names,emailAddresses')

PHP

$people = $people_service->people_connections->listPeopleConnections(
    'people/me', array('personFields' => 'names,emailAddresses'));

.NET

PeopleResource.ConnectionsResource.ListRequest peopleRequest =
    peopleService.People.Connections.List("people/me");
peopleRequest.PersonFields = "names,emailAddresses";
ListConnectionsResponse response = peopleRequest.Execute();
IList<Person> people = response.Connections;

Wyświetl listę kontaktów użytkownika, które uległy zmianie

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
  }
}

Więcej informacji o sposobie synchronizacji znajdziesz w artykule ListConnections.

Wyszukaj w kontaktach użytkownika

Aby wyszukać wszystkie kontakty użytkownika, użyj tego kodu:

Protokół

// 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

Java

// 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();

Utwórz nowy kontakt

Aby utworzyć nowy kontakt, użyj tego kodu:

Protokół

POST /v1/people:createContact HTTP/1.1
Body: { "names": [{ "givenName": "John", "familyName": "Doe" }] }
Host: people.googleapis.com

Java

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();

Wykorzystanie limitu na żądanie

  • 1 krytyczne żądania odczytu (odczyty kontaktów i profilu)
  • 1 krytyczne żądania zapisu (tworzenie i aktualizowanie kontaktu)
  • 1 dziennie zapisy kontaktów (łącznie)

Aktualizowanie istniejącego kontaktu

Aby zaktualizować istniejący kontakt, dodaj pole person.metadata.sources.etag w nazwie osoby, aby kontakt został zaktualizowany. Dzięki temu kontakt nie zmienił się od czasu ostatniego odczytu. Użyj tego kodu:

Protokół

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

Java

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();

Wykorzystanie limitu na żądanie

  • 1 krytyczne żądania odczytu (odczyty kontaktów i profilu)
  • 1 krytyczne żądania zapisu (tworzenie i aktualizowanie kontaktu)
  • 1 dziennie zapisy kontaktów (łącznie)

Usuwanie istniejącego kontaktu

Aby usunąć istniejący kontakt, użyj tego kodu:

Protokół

DELETE /v1/resource_name:deleteContact HTTP/1.1
Host: people.googleapis.com

Java

peopleService.people().deleteContact("resource_name").execute();

Wykorzystanie limitu na żądanie

  • 1 żądanie zapisu (usunięcie kontaktów i zapisy w grupach kontaktów)

Zbiorczo utwórz nowe kontakty

Aby zbiorczo utworzyć nowe kontakty, użyj tego kodu:

Protokół

POST /v1/people:batchCreateContacts?readMask=names HTTP/1.1
Body: {
  "contacts": [
    {
      "contactPerson": {
        "names": [
          {
            "givenName": "John",
            "familyName": "Doe"
          }
        ]
      }
    }
  ]
}
Host: people.googleapis.com

Java

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();

Wykorzystanie limitu na żądanie

  • 6 krytycznych żądań odczytu (odczyty kontaktów i profilu)
  • 6 krytycznych żądań zapisu (tworzenie i aktualizowanie kontaktu)
  • 200 dziennych zapisów kontaktów (łącznie)

Zbiorcza aktualizacja istniejących kontaktów

Aby zaktualizować istniejący kontakt, dla każdej osoby musisz dołączyć pole person.metadata.sources.etag. Dzięki temu będziesz mieć pewność, że kontakt nie zmienił się od czasu ostatniego odczytu. Użyj tego kodu:

Protokół

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

Java

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();

Wykorzystanie limitu na żądanie

  • 6 krytycznych żądań odczytu (odczyty kontaktów i profilu)
  • 6 krytycznych żądań zapisu (tworzenie i aktualizowanie kontaktu)
  • 200 dziennych zapisów kontaktów (łącznie)

Zbiorczo usuń istniejące kontakty

Aby zbiorczo usunąć istniejące kontakty, użyj tego kodu:

Protokół

POST /v1/people:batchDeleteContacts HTTP/1.1
Body: {"resource_names": ["resource_name"]}
Host: people.googleapis.com

Java

BatchDeleteContactsRequest request = new BatchDeleteContactsRequest();

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

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

Wykorzystanie limitu na żądanie

  • 10 żądań zapisu (usunięcia kontaktów i zapisów w grupach kontaktów)