为什么我无法检索 Google 人 API 的电子邮件地址和 phone 号码?
Why can't I retrieve emails addresses and phone numbers with Google People API?
我想使用 Google People API and I'm using their Try it! 工具检索我的联系人姓名、电子邮件地址和 phone 号码以测试 API。
正在检索 姓名,但未检索电子邮件地址和 phone 号码 。我认为我做的一切都是正确的。我已通过适当的范围和选定的字段进行了适当的身份验证。
我是不是做错了什么?或者这可能是 Google 方面的问题?
我发现 . According to the Google People API docs omitting this RequestMask
字段将包含所有字段,但事实并非如此。在我的例子中,将 RequestMask
字段设置为 person.names,person.emailAddresses,person.phoneNumbers
有效。
您必须使用 people.connections.list 来获取联系人列表,然后遍历它们并使用 people.get 来获取每个单独的联系人。在我的例子中,我将 pageSize 设置为 50,然后我使用 people:batchGet(一次最多支持 50 个资源名称)来获取这 50 个联系人的详细信息。
一旦您将凭据对象保存在某处。您可以使用以下代码检索 phone 号码和其他详细信息。您只需设置 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
需要说明的是——因为它 真的 对我来说不是——如果你自己构建 GET
请求,请求掩码的查询参数是 requestMask.includeField
。嵌套的 JSON 被展平为一个键路径。所以完整的连接列表 GET
请求将类似于:
用户的 phone 号码和其他详细信息只有在用户将它们添加到他们的 Google 个人资料中时才会被提取。
如果您使用 Try this API 工具并使用 'resourceName = people/me',则:
- 您应该使用 Google 帐户登录并且
- 同意允许 google API 浏览器工具访问登录用户(在本例中为您)的个人资料详细信息。 See example here.
在您同意后,它将能够为登录用户获取'phoneNumbers'和'addresses'。
如果您想访问其他用户的个人资料,或者您正在从任何其他来源呼叫 API,那么:
用户必须允许您的 app/website/program 从 his/her 个人资料
访问请求的信息
您必须在 GET REQUEST HEADERS 中包含 'authorization' KEY 和 VALUE "Bearer (OAuth accesstoken of the target user)" 才能从目标用户的个人资料中获取个人详细信息。
OAuth accesstoken 可以直接从用户同意响应中获取,也可以通过将refreshtoken 换成accesstoken 来获取。
我想使用 Google People API and I'm using their Try it! 工具检索我的联系人姓名、电子邮件地址和 phone 号码以测试 API。
正在检索 姓名,但未检索电子邮件地址和 phone 号码 。我认为我做的一切都是正确的。我已通过适当的范围和选定的字段进行了适当的身份验证。
我是不是做错了什么?或者这可能是 Google 方面的问题?
我发现 RequestMask
字段将包含所有字段,但事实并非如此。在我的例子中,将 RequestMask
字段设置为 person.names,person.emailAddresses,person.phoneNumbers
有效。
您必须使用 people.connections.list 来获取联系人列表,然后遍历它们并使用 people.get 来获取每个单独的联系人。在我的例子中,我将 pageSize 设置为 50,然后我使用 people:batchGet(一次最多支持 50 个资源名称)来获取这 50 个联系人的详细信息。
一旦您将凭据对象保存在某处。您可以使用以下代码检索 phone 号码和其他详细信息。您只需设置 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
需要说明的是——因为它 真的 对我来说不是——如果你自己构建 GET
请求,请求掩码的查询参数是 requestMask.includeField
。嵌套的 JSON 被展平为一个键路径。所以完整的连接列表 GET
请求将类似于:
用户的 phone 号码和其他详细信息只有在用户将它们添加到他们的 Google 个人资料中时才会被提取。
如果您使用 Try this API 工具并使用 'resourceName = people/me',则:
- 您应该使用 Google 帐户登录并且
- 同意允许 google API 浏览器工具访问登录用户(在本例中为您)的个人资料详细信息。 See example here.
在您同意后,它将能够为登录用户获取'phoneNumbers'和'addresses'。
如果您想访问其他用户的个人资料,或者您正在从任何其他来源呼叫 API,那么:
用户必须允许您的 app/website/program 从 his/her 个人资料
访问请求的信息
您必须在 GET REQUEST HEADERS 中包含 'authorization' KEY 和 VALUE "Bearer (OAuth accesstoken of the target user)" 才能从目标用户的个人资料中获取个人详细信息。
OAuth accesstoken 可以直接从用户同意响应中获取,也可以通过将refreshtoken 换成accesstoken 来获取。