使用Google API修改Google联系人

时间:2016-06-09 12:54:12

标签: google-api google-contacts

我想开始使用.NET客户端开发Google API。第一步,我尝试获取所有谷歌联系人,现在我想插入联系人。 我已经阅读了很多关于Google API到CRUD(创建,阅读,更新和删除)联系人的内容。有Contact API,People API和其他(?)。 CRUD联系人的最佳方式是什么?

UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
  new ClientSecrets
  {
    ClientId = "xyz.apps.googleusercontent.com",
    ClientSecret = " xyz"
  },
  new[] { "profile", "https://www.google.com/m8/feeds/contacts/xy%40gmail.com/full" },
  "me",
  CancellationToken.None).Result;

// Create the service.
var peopleService = new PeopleService(new BaseClientService.Initializer()
{
  HttpClientInitializer = credential,
  ApplicationName = "WindowsClient-Google-Sync",
});

ListRequest listRequest = peopleService.People.Connections.List("people/me");
listRequest.SyncToken = null;
ListConnectionsResponse result = listRequest.Execute();

foreach (Person person in result.Connections)
{
  foreach (Name name in person.Names)
  {
    Console.WriteLine("Name: " + name.DisplayName);
  }
}

如何扩展此示例以创建或更新联系人?

由于

安德烈亚斯

1 个答案:

答案 0 :(得分:1)

如果您要查看Google Contacts API

  

Google通讯录API允许客户端应用程序查看和更新​​用户的联系人。联系人存储在用户的Google帐户中;大多数Google服务都可以访问联系人列表。

     

您的客户端应用程序可以使用Google通讯录API创建新联系人,编辑或删除现有联系人,以及查询符合特定条件的联系人

创建联系人

  

要创建新联系人,请向用户的联系人供稿网址发送授权POST请求,并附上正文中的联系人数据。

网址格式为:

https://www.google.com/m8/feeds/contacts/{userEmail}/full
  

成功后,服务器将使用HTTP 201创建的状态代码和创建的联系人条目进行响应,其中包含服务器设置的一些其他元素和属性(以粗体显示),例如id,各种链接元素和属性。

import com.google.gdata.client.contacts.ContactsService;
import com.google.gdata.data.contacts.ContactEntry;
import com.google.gdata.data.contacts.ContactGroupFeed;
import com.google.gdata.data.extensions.City;
import com.google.gdata.data.extensions.Country;
import com.google.gdata.data.extensions.Email;
import com.google.gdata.data.extensions.ExtendedProperty;
import com.google.gdata.data.extensions.FormattedAddress;
import com.google.gdata.data.extensions.FullName;
import com.google.gdata.data.extensions.Im;
import com.google.gdata.data.extensions.Name;
import com.google.gdata.data.extensions.PhoneNumber;
import com.google.gdata.data.extensions.PostCode;
import com.google.gdata.data.extensions.Region;
import com.google.gdata.data.extensions.Street;
import com.google.gdata.data.extensions.StructuredPostalAddress;
// ...
public static ContactEntry createContact(ContactsService myService) {
  // Create the entry to insert.
  ContactEntry contact = new ContactEntry();
  // Set the contact's name.
  Name name = new Name();
  final String NO_YOMI = null;
  name.setFullName(new FullName("Elizabeth Bennet", NO_YOMI));
  name.setGivenName(new GivenName("Elizabeth", NO_YOMI));
  name.setFamilyName(new FamilyName("Bennet", NO_YOMI))
  contact.setName(name);
  contact.setContent(new PlainTextConstruct("Notes"));
  // Set contact's e-mail addresses.
  Email primaryMail = new Email();
  primaryMail.setAddress("liz@gmail.com");
  primaryMail.setDisplayName("E. Bennet");
  primaryMail.setRel("http://schemas.google.com/g/2005#home");
  primaryMail.setPrimary(true);
  contact.addEmailAddress(primaryMail);
  Email secondaryMail = new Email();
  secondaryMail.setAddress("liz@example.com");
  secondaryMail.setRel("http://schemas.google.com/g/2005#work");
  secondaryMail.setPrimary(false);
  contact.addEmailAddress(secondaryMail);
  // Set contact's phone numbers.
  PhoneNumber primaryPhoneNumber = new PhoneNumber();
  primaryPhoneNumber.setPhoneNumber("(206)555-1212");
  primaryPhoneNumber.setRel("http://schemas.google.com/g/2005#work");
  primaryPhoneNumber.setPrimary(true);
  contact.addPhoneNumber(primaryPhoneNumber);
  PhoneNumber secondaryPhoneNumber = new PhoneNumber();
  secondaryPhoneNumber.setPhoneNumber("(206)555-1213");
  secondaryPhoneNumber.setRel("http://schemas.google.com/g/2005#home");
  contact.addPhoneNumber(secondaryPhoneNumber);
  // Set contact's IM information.
  Im imAddress = new Im();
  imAddress.setAddress("liz@gmail.com");
  imAddress.setRel("http://schemas.google.com/g/2005#home");
  imAddress.setProtocol("http://schemas.google.com/g/2005#GOOGLE_TALK");
  imAddress.setPrimary(true);
  contact.addImAddress(imAddress);
  // Set contact's postal address.
  StructuredPostalAddress postalAddress = new StructuredPostalAddress();
  postalAddress.setStreet(new Street("1600 Amphitheatre Pkwy"));
  postalAddress.setCity(new City("Mountain View"));
  postalAddress.setRegion(new Region("CA"));
  postalAddress.setPostcode(new PostCode("94043"));
  postalAddress.setCountry(new Country("US", "United States"));
  postalAddress.setFormattedAddress(new FormattedAddress("1600 Amphitheatre Pkwy Mountain View"));
  postalAddress.setRel("http://schemas.google.com/g/2005#work");
  postalAddress.setPrimary(true);
  contactOne.addStructuredPostalAddress(postalAddress);
  // Ask the service to insert the new entry
  URL postUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full");
  ContactEntry createdContact = myService.insert(postUrl, contact);
  System.out.println("Contact's ID: " + createdContact.getId());
  return createdContact;
}

更新联系人

  

要更新联系人,请首先检索联系人条目,修改数据并向联系人的编辑网址发送授权PUT请求,并在主体中修改联系人条目。

网址格式为:

https://www.google.com/m8/feeds/contacts/userEmail/full/{contactId}

为确保发送到API的数据不会覆盖其他客户的更改,应在请求标头中提供联系人条目的Etag。

If-Match: Etag

成功后,服务器将使用HTTP 200 OK状态代码和更新的联系人条目进行响应。

public static ContactEntry updateContactName(
    ContactsService myService, URL contactURL)
    throws ServiceException, IOException {
  // First retrieve the contact to updated.
  ContactEntry entryToUpdate = myService.getEntry(contactURL, ContactEntry.class);
  entryToUpdate.getName().getFullName().setValue("New Name");
  entryToUpdate.getName().getGivenName().setValue("New");
  entryToUpdate.getName().getFamilyName().setValue("Name");
  URL editUrl = new URL(entryToUpdate.getEditLink().getHref());
  try {
    ContactEntry contactEntry = myService.update(editUrl, entryToUpdate);
    System.out.println("Updated: " + contactEntry.getUpdated().toString());
    return contactEntry;
  } catch (PreconditionFailedException e) {
    // Etags mismatch: handle the exception.
  }
  return null;
}

删除联系人

要删除联系人,请将已授权的DELETE请求发送给该联系人的编辑网址。

网址格式为:

https://www.google.com/m8/feeds/contacts/{userEmail}/full/{contactId}

为确保发送到API的数据不会覆盖其他客户的更改,应在请求标头中提供联系人条目的Etag。

If-Match: Etag

成功后,服务器会以HTTP 200 OK状态代码进行响应。

public static void deleteContact(ContactsService myService, URL contactURL)
    throws ServiceException, IOException {
  // Retrieving the contact is required in order to get the Etag.
  ContactEntry contact = myService.getEntry(contactURL, ContactEntry.class);

  try {
    contact.delete();
  } catch (PreconditionFailedException e) {
    // Etags mismatch: handle the exception.
  }
}

while People API

  

People API允许您列出经过身份验证的用户的联系人,并检索经过身份验证的用户及其联系人的个人资料信息。

     

例如,让我们说经过身份验证的用户Jen在她的私人联系人中有Fabian和Ranjith。当您的应用程序调用people.connections.list以检索其连接列表时,Jen会看到一个同意屏幕,要求让应用程序访问该列表。如果Jen同意,该应用程序将检索包含Fabian和Ranjith的列表(每个人的资源名称)。然后,应用程序可以调用people.get,传入资源名称,以获取每个人的私人联系人和公开个人资料数据。