我想开始使用.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);
}
}
如何扩展此示例以创建或更新联系人?
由于
安德烈亚斯
答案 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,传入资源名称,以获取每个人的私人联系人和公开个人资料数据。