我正在尝试使用Python客户端库以编程方式访问我自己的个人Google帐户中的联系人列表
这是一个将在没有用户输入的情况下在服务器上运行的脚本,因此我将其设置为使用我设置的服务帐户中的凭据.我的Google API控制台设置如下所示.
我正在使用以下基本脚本,从API文档中提供的示例中提取 -
import json
from httplib2 import Http
from oauth2client.service_account import ServiceAccountCredentials
from apiclient.discovery import build
# Only need read-only access
scopes = ['https://www.googleapis.com/auth/contacts.readonly']
# JSON file downloaded from Google API Console when creating the service account
credentials = ServiceAccountCredentials.from_json_keyfile_name(
'keep-in-touch-5d3ebc885d4c.json', scopes)
# Build the API Service
service = build('people', 'v1', credentials=credentials)
# Query for the results
results = service.people().connections().list(resourceName='people/me').execute()
# The result set is a dictionary and should contain the key 'connections'
connections = results.get('connections', []) …
Run Code Online (Sandbox Code Playgroud) 我遇到了上述2个API的问题.鉴于下一个场景:我有2个不同的谷歌帐户.一个不使用Google+和另一个使用Google+的帐户
在第一个不使用Google+的帐户上使用通讯录API时,我可以看到所有联系人:
GET /m8/feeds/contacts/<email>/full
Run Code Online (Sandbox Code Playgroud)
使用Google+的第二个帐户也是如此.
当我使用People API作为第一个不使用Google+的帐户时,我的回复是空的(实际上我只是获得了下一个同步令牌:
GET https://people.googleapis.com/v1/people/me/connections
Run Code Online (Sandbox Code Playgroud)
随着下一个范围:
https://www.googleapis.com/auth/contacts
Run Code Online (Sandbox Code Playgroud)
返回:
{
"nextSyncToken": "CMe6...."
}
Run Code Online (Sandbox Code Playgroud)
对第二个帐户(使用Google+)的同一调用就像一个魅力
两个帐户之间的唯一区别是Google+,People API是否可以仅适用于Google+帐户?或者是我缺少的其他东西
我想获取从我的应用登录的用户的所有谷歌私人连接.我启用了Google People和Google Plus API.我设置了凭证API密钥,客户端ID和客户端密钥.我正在尝试获取用户连接的URL是
https://people.googleapis.com/v1/people/me/connections?fields=connections&key=api_key&access_token=access_token
Run Code Online (Sandbox Code Playgroud)
另外,我正在使用图书馆passport-google-oauth来获取用户access_token.以上网址中是否有任何我遗漏的内容.
我的谷歌验证码是
// send to google to do the authentication
// profile gets us their basic information including their name
// email gets their emails
app.get('/auth/google', passport.authenticate('google', {
scope: ['profile', 'email','https://www.googleapis.com/auth/contacts.readonly', 'https://www.googleapis.com/auth/contacts']
}));
// the callback after google has authenticated the user
app.get('/auth/google/callback',
passport.authenticate('google', {
successRedirect: '/profile',
failureRedirect: '/'
}));
Run Code Online (Sandbox Code Playgroud) google-api google-api-nodejs-client passport-google-oauth google-people
所以,我正在使用Google API使用他们的user_id来获取用户的个人资料图片.Google API会返回如下的JSON:
{
image: {
url: "https://lh5.googleusercontent.com/OGjgCn9fCPk/AAAAAAAAAAI/AAAAAAAAASU/AitRTc5cUyg/photo.jpg?sz=50",
isDefault: false
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这个网址是否有变化?我的意思是,如果用户更改其个人资料图片或发生某些CDN重组,它是否会改变.
我每次都需要取它吗?或者我可以永远保存并使用它吗?
如果不是他们可以保存的一段时间,直接使用它并在该时间过后刷新?
因此,如果我们更改个人资料图片,则URL会发生变化.现在,旧URL和新URL都指向相同的新配置文件图片.
是否有任何超时或Google将使旧网址无效的任何内容?或者他们两个会无限期地继续指向已更改的图片(以及任何未来的更改)吗?
当我提出请求时,我没有得到频繁的联系,只是保存了.我从技术上理解"工作正常",但谷歌联系人API文档(确实显示频繁的联系)说明:
注意:对于用户联系人的只读访问权限,请使用People API,它提供联系人和配置文件信息,并且不使用旧的GData协议.
感觉就像那个告诉我People API是一个较新版本的Contacts,它支持只读版本的Contacts,所以我认为它应该存在.
这是我在stackoverflow中的第一个问题.当我试图获得用户生日年份时,我遇到了Google People API的问题.这是我的logcat的日志.
D/FitPartners: {"date":{"day":20,"month":1},"metadata":{"primary":true,"source":{"id":"1....41","type":"PROFILE"}}}
正如你所看到的,我可以得到月和日.但是,那里没有一年.即使我正在使用谷歌尝试它!来自https://developers.google.com/people/api/rest/v1/people/get.回应也没有给出年份.
Response
200 OK
- Show headers -
{
"resourceName": "people/1.......41",
"etag": "r....a4o=",
"birthdays": [
{
"metadata": {
"primary": true,
"source": {
"type": "PROFILE",
"id": "1........41"
}
},
"date": {
"month": 1,
"day": 20
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
在决定提出问题之前,我一直在努力弄清楚这一点并从stackoverflow搜索4天.请帮忙.
我想使用Google People API检索我的联系人姓名,电子邮件地址和电话号码,我正在使用他们的试用版!用于测试API的工具.
将被取回的姓名,但不是电子邮件地址和电话号码.我想我正在做的一切正确.我已通过适当的范围和选定的字段进行了适当的身份验证.
难道我做错了什么?或者这可能是谷歌方面的一个问题?
现在Plus.API
已经弃用了Google Play Services 9.4
,在Android应用程序上为经过身份验证的用户获取Google Plus圈子的正确方法是什么?
现在我们已经弃用了加载方法加上用户Plus.PeopleApi.load
新文件说:
如果您的应用需要社交信息和更广泛的个人资料数据,请查看Android联系人提供程序或跨平台的People API.
所以我应该使用Android Contacts Provider,这似乎是一个很难的选择(因为我必须使用游标过滤联系人并管理运行时权限).
以前弃用方法的任何简单替代方法只是为用户获取G +圈子列表?
我正在尝试请求通过Google OAuth登录的用户的个人资料信息.我的请求形成正确,我成功登录,但当我尝试在PHP中发出以下请求时,我得到错误请求掩码不能为空.有效路径是:...
但是,从Google People API people.get文档中可以清楚地看出,请求掩码值是可选的,如果没有传递,将返回除people.connections.list之外的所有值.这是我的代码:
// The entire OAuth process works up until this point...
// create the service
$service = new Google_Service_People($this->client);
try {
$results = $service->people->get('people/me');
} catch(\Exception $exception) {
echo $exception->getMessage();
exit;
}
Run Code Online (Sandbox Code Playgroud)
以下是我从此错误中获得的异常消息:
{ "error": { "code": 400, "message": "Request mask can not be empty. Valid paths are: [person.addresses, person.age_ranges, person.biographies, person.birthdays, person.bragging_rights, person.cover_photos, person.email_addresses, person.events, person.genders, person.im_clients, person.interests, person.locales, person.memberships, person.metadata, person.names, person.nicknames, person.occupations, person.organizations, person.phone_numbers, person.photos, person.relations, person.relationship_interests, …
我正在使用谷歌人API.因为我正在使用Java客户端库.我可以列出,添加,更新,获取联系人,但我无法通过使用人员API 搜索联系人.例如,如果我想通过电话号码获取联系人以(+919500)或姓名以字母"M开头" ".怎么实现这个?请帮我找到解决方案.
注意:我不希望使用Contact API v3或Google +获得结果,因为这些API已被弃用.