谷歌的人员 API 与联系人 API

Posted

技术标签:

【中文标题】谷歌的人员 API 与联系人 API【英文标题】:People API of google versus contacts API 【发布时间】:2016-10-08 07:40:52 【问题描述】:

在尝试使用用户的 google 帐户获取联系人时,我在使用人员 API 后遇到了一些问题。它仅返回所有列出的电子邮件地址中的少数电子邮件地址。访问令牌和所有范围都已正确设置。 以下代码:

People peopleService = new People.Builder(httpTransport, jsonFactory, credential)
                    .build();
ListConnectionsResponse response = peopleService.people().connections().list("people/me")
                    .setPageSize(500).setSortOrder("FIRST_NAME_ASCENDING")
                    .setAccessToken(tokenResponse.getAccessToken())
                    .setAlt("json")
                    .setRequestMaskIncludeField("person.names,person.emailAddresses,person.phoneNumbers")
                    . execute();
   connections = response.getConnections();

如果我使用谷歌的联系人 API 而不是这个,那么我得到的电子邮件地址比人多。联系人 API 的代码:

URL feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full");
    ContactFeed resultFeed = myService.getFeed(feedUrl, ContactFeed.class);

    // Print the results
    System.out.println(resultFeed.getTitle().getPlainText());
    for (ContactEntry entry : resultFeed.getEntries()) 
          ....
          .....
          .......
 

我想知道它们两者之间是否有任何区别,以及我必须使用哪一个以获得更好的结果,或者我是否遗漏了什么。请建议。谢谢..!!

【问题讨论】:

签出people.googleapis.com/$discovery/rest?version=v1 为您提供支持的架构和方法。 【参考方案1】:

People API 是最新的。通过阅读Google's blog announcement,People API 简化了对 Google+ API 和联系人 API 的单独调用。现在你只需要使用一个。

“新的 People API 使用最新的协议和技术,并且 最终将取代使用 GData 的联系人 API 协议”

获取用户的list of connections时,使用时一定要指定correct scopes。

https://www.googleapis.com/auth/contacts - 请求为您的应用授予对经过身份验证的用户的 Google 通讯录中联系人的读写访问权限。 https://www.googleapis.com/auth/contacts.readonly - 请求为您的应用授予对经过身份验证的用户的 Google 通讯录中联系人的读取权限。

在 People API 和 Contacts API 之间检查这个link for similarities and differences。

【讨论】:

我已经正确添加了所有的范围,但是人们的 api 没有给出那么多。联系人的电子邮件地址作为联系人 api。【参考方案2】:

我不确定java代码是否有任何问题,但如果你查看发出的请求,它应该是这样的:

网址:https://content-people.googleapis.com/v1/people/me/connections?pageSize=300&requestMask.includeField=person.names%2Cperson.email_addresses&sortOrder=FIRST_NAME_ASCENDING&key=

我能够使用正确的电子邮件和姓名获取所有联系人。如果你用谷歌搜索“管理谷歌联系人”,你会看到一个联系人列表。从那里获取该数字,然后打印出应该匹配的连接数。您只需要确保 pageSize 足够大,否则您必须处理分页以获取所有联系人。

我还意识到 requestMask.includeField 对您放置的参数和空格非常敏感。 “person.name,person.email_addresses”有效,“person.name,person.email_addresses”无效。

使用较旧的联系人 api,您可以查询 q 参数,我认为 people api 不提供此功能。我认为按关键字过滤搜索的能力对于减少请求大小很重要。

【讨论】:

以上是关于谷歌的人员 API 与联系人 API的主要内容,如果未能解决你的问题,请参考以下文章

Google 通讯录 API 与人员 API

如何使用谷歌联系人api以编程方式将手机联系人同步到android中的gmail

如何在注册过程中获取多个谷歌凭据(Gmail API、Pub/Sub、联系人)

Google API/获取目录联系人

传递日期对象时,人员 API 未创建生日

是否有谷歌 api 来验证 gmail 是否在 java 中有效?