Google通讯录API - 访问其他用户

时间:2014-02-05 17:38:07

标签: python-2.7 google-api google-oauth google-contacts google-api-python-client

我正在尝试使用Google Contacts API和Python / GDATA客户端处理程序通过OAuth 2.0为域中的用户访问联系人。我最终想要创建一个Web服务来为用户添加联系人,但第一步是让这个测试工作。

如果我使用默认URI,我可以访问我自己的联系人。但是,当我传入电子邮件地址为另一个用户构建URI时,我似乎无法访问其他用户的联系人。这是我正在使用的代码:

client.GetContacts(uri=client.GetFeedUri(contact_list=userEmail))

执行此操作时会返回403错误。

gdata.client.RequestError: Server responded with: 403

Your client does not have permission to get URL /m8/feeds/contacts/<userEmail>/full from this server.

主要是试图了解我在这里尝试的是否可能。例如,在电子邮件设置API中,您可以对域进行身份验证并传入用户的电子邮件以列出其标签,添加过滤器等。因此,我预计Contacts API的工作方式相同,但处理方式略有不同,即修改URI,而不是仅仅将参数传递给客户端处理程序。如果我在这个推定中错了,请告诉我。

对于授权,我使用flow_from_clientsecrets获取详细信息,然后获取令牌以授权域的ContactsClient。再次,我可以很好地访问我自己的联系人,因此授权似乎没问题,但我无法访问其他用户的联系人。

client = token.authorize(ContactsClient(domain=domain))

似乎我在访问其他用户时遗漏了一些东西。有人能帮我解决这个驼峰吗?以下是我检查/确认过的一些事情:

  • 为项目启用了Contacts API
  • 已在控制面板中为客户ID授权范围&gt;管理第三方访问
  • 我是域中的超级管理员。

谢谢你的时间!

1 个答案:

答案 0 :(得分:1)

我在另一篇文章中找到了答案,其中包含非常详细的内容:

Domain-Wide Access to Google GDATA APIs

您需要使用“服务帐户”身份验证。出于某种原因,我认为这只适用于较新的基于发现的API。但是,服务帐户访问也适用于GDATA API。我现在可以访问域中用户的所有联系人。