我正在尝试使用.Net API从Google帐户中获取所有联系人。
案例1:
var cr = new ContactsRequest(settings);
var feed = cr.GetContacts();
当我执行类似前一代码段的操作时,它会为我提供所有联系人,但它也为同一用户带来了其他联系人。就性能而言,这可能是非常昂贵的。然后我在本地过滤联系人 并且只保留我感兴趣的那些,但损坏已经完成。
案例2:
var cr = new ContactsRequest(settings);
var groupFeed = cr.GetGroups();
foreach (var group in groupFeed.Entries.ToList()) {
var query = new ContactsQuery(ContactsQuery.CreateContactsUri("default")) {Group = group.Id};
var contactFeed = cr.Get<Contact>(query);
contactsList.AddRange(contactFeed.Entries.ToList());
}
在这种情况下,遍历帐户中的组并获取每个组的联系人。其他联系人不是一个群体,所以我设法逃脱它们。默认情况下,当用户在任何组中创建联系人时,联系人将添加到此组并添加到“我的联系人”的“主组”。因此,联系人可以是一个联系人(我的联系人 - 如果在那里创建)或更多组(如果在其他地方创建联系人)。 但是,用户可以手动从“我的联系人”中删除该联系人,并将其仅保留在另一个组中。
因此,上述的最佳解决方案是获取除其他联系人之外的所有联系人。有人可以提出一个解决方案(可能会在ContactsQuery或其他东西中添加一些参数)吗?
答案 0 :(得分:0)
如果您只想要自己的联系人,我建议您使用Google People API,这与Google Contacts API不同。这是Nuget包。 Google People API目前不允许您获取&#34;其他联系人&#34;,因此他们的正常GET方法只能检索联系人中的条目。这是一个例子:
// Setup authentication
var credential = new UserCredential(flow, "<LOGGED IN USER's EMAIL ADDRESS>", token);
var service = new PeopleService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = _applicationName,
});
var connectionsRequest = service.People.Connections.List("people/me");
// Assign what properties you want filled in. Fewer properties will be more performant.
connectionsRequest.RequestMaskIncludeField = "person.names,person.emailAddresses,person.photos";
do
{
var connectionsResponse = connectionsRequest.Execute();
var connections = connectionsResponse.Connections;
foreach (var connection in connections)
{
// TODO: Handle each record as you need
}
// This API pages results and you manually need to retrieve the next set
connectionsRequest.PageToken = connectionsResponse.NextPageToken;
} while (!string.IsNullOrEmpty(connectionsRequest.PageToken));