为什么我无法使用Google People API检索电子邮件地址和电话号码?

时间:2016-04-07 03:10:52

标签: google-api google-people

我想使用Google People API检索我的联系人姓名,电子邮件地址和电话号码,我正在使用他们的Try it!工具来测试API。

正在检索名称,但不会检索电子邮件地址和电话号码。我想我正在做的一切正确。我已通过适当的范围和选定的字段进行了适当的身份验证。 enter image description here enter image description here

我做错了吗?或者这可能是谷歌方面的一个问题?

5 个答案:

答案 0 :(得分:15)

我找到了solution。根据Google People API文档,省略此RequestMask字段将包含所有字段,但不会发生这种情况。在我的情况下,将RequestMask字段设置为person.names,person.emailAddresses,person.phoneNumbers

答案 1 :(得分:2)

你必须使用people.connections.list来获取联系人列表,然后循环它们并使用people.get来获取每个联系人。在我的情况下,我将pageSize设置为50,然后我使用people:batchGet(一次最多支持50个资源名称)来获取这50个联系人的详细信息。

答案 2 :(得分:2)

要明确 - 因为真的不是我 - 如果您自己构建GET请求,请求掩码的查询参数是requestMask.includeField。嵌套的JSON被展平为一个键路径。因此,完整的连接列表GET请求将类似于:

https://content-people.googleapis.com/v1/people/me/connections?requestMask.includeField=person.names,person.addresses,person.email_addresses,person.organizations,person.phone_numbers

答案 3 :(得分:2)

用户的电话号码和其他详细信息仅在用户将其添加到Google个人资料中时才会被提取。

如果您使用Try this API工具并使用' resourceName = people / me',则:

  1. 您应该使用自己的Google帐户登录
  2. 同意允许Google API资源管理器工具访问已登录用户(在本例中为您的)个人资料详细信息。 See example here.
  3. 在您同意之后,它将能够获取“电话号码”'和'地址'对于登录用户。

    如果您想访问其他用户的个人资料,或者您正在从任何其他来源调用API,那么:

    1. 用户必须授权您的应用/网站/程序从他/她的个人资料中访问所需信息

    2. 您必须包含'授权'使用VALUE"承载(目标用户的OAuth访问)"获取请求标题的关键字;从目标用户的个人资料中获取个人详细信息。

    3. OAuth accesstoken可以直接从用户同意响应中获得,也可以通过刷新connecttoken来获取。

答案 4 :(得分:1)

将凭据对象保存到某处后。您可以使用以下代码检索电话号码和其他详细信息。您只需设置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