我想使用Google People API检索我的联系人姓名、电子邮件地址和电话号码,我正在使用他们的Try it!用于测试 API 的工具。
正在检索姓名,但未检索电子邮件地址和电话号码。我认为我做的一切都是正确的。我已通过适当的范围和选定的字段进行了适当的身份验证。
难道我做错了什么?或者这可能是谷歌方面的问题?
我想使用Google People API检索我的联系人姓名、电子邮件地址和电话号码,我正在使用他们的Try it!用于测试 API 的工具。
正在检索姓名,但未检索电子邮件地址和电话号码。我认为我做的一切都是正确的。我已通过适当的范围和选定的字段进行了适当的身份验证。
难道我做错了什么?或者这可能是谷歌方面的问题?
我找到了解决方案。根据 Google People API 文档,省略此RequestMask
字段将包括所有字段,但这不会发生。就我而言,将RequestMask
字段设置为person.names,person.emailAddresses,person.phoneNumbers
有效。
为了清楚起见——因为这对我来说真的不是——如果你GET
自己构建请求,请求掩码的查询参数是requestMask.includeField
. 嵌套的 JSON 被展平为一个键路径。所以完整的连接列表GET
请求将类似于:
仅当用户将其添加到其 Google 个人资料中时,才会获取用户的电话号码和其他详细信息。
如果您正在使用Try this API工具并使用“resourceName = people/me”,那么:
在您同意后,它将能够获取登录用户的“电话号码”和“地址”。
如果您想访问其他用户的个人资料,或者您正在从任何其他来源调用 API,那么:
用户必须允许您的应用程序/网站/程序从他/她的个人资料中访问所请求的信息
您必须在 GET REQUEST HEADERS 中包含 'authorization' KEY 和 VALUE "Bearer (OAuth accesstoken of the target user)" 以从目标用户的个人资料中获取个人详细信息。
OAuth accesstoken 可以直接从用户同意响应中获得,也可以通过用 refreshtoken 交换 accesstoken 来获得。
您必须使用 people.connections.list 来获取联系人列表,然后遍历它们并使用 people.get 来获取每个单独的联系人。在我的例子中,我将 pageSize 设置为 50,然后我使用people:batchGet(一次最多支持 50 个资源名称)来获取这 50 个联系人的详细信息。
一旦您将凭据对象保存在某处。您可以使用以下代码检索电话号码和其他详细信息。你只需要设置 RequestMask
#get the credentials
cred_obj = OAuth2Credentials.new_from_json(credentials)
http = httplib2.Http()
#create service
people_service = build(serviceName='people', version='v1', http=cred_obj.authorize(http))
results = people_service.people().connections().list(resourceName='people/me',
requestMask_includeField='person.names,person.emailAddresses,person.phoneNumbers',
pageSize=160)
res = results.execute()
connections = res.get('connections', [])
for person in connections:
names = person.get('names', [])
phone_numbers = person.get('phoneNumbers', [])
if len(names) > 0:
name = names[0].get('displayName')
if len(phone_numbers)>0:
phone_no = phone_numbers[0].get('value')
print name, phone_no