我正在寻找一种从Google帐户中检索我的联系人的每个电子邮件地址以获取Python中的“桌面”应用程序的好方法。
我第一次通过Google Code创建了一个应用。我切换了Google Plus API,检索了我的大部分用户数据,但没有检索任何联系人。
我开始调查,我发现了很多东西,但大多数都已经过时了。
我找到了一种很好的方法来检索我的联系人,使用gdata库但通过https://www.google.com/m8/feeds授予我完整的读/写访问权限而没有任何反馈。
self.gd_client = gdata.contacts.client.ContactsClient(source='MyAppliName')
self.gd_client.ClientLogin(email, password, self.gd_client.source)
据官方'google contact api'Google群组迁移到stackoverflow,只读访问权限已损坏。
顺便说一句,我不是“相信我的应用程序,我使用只读访问权限,我发誓。”
我在https://developers.google.com/oauthplayground找到了google api游乐场,他们使用OAuth2.0令牌与大多数api,包括联系人,切换网页:
Google OAuth 2.0 Playground正在请求获得以下权限:
- 管理您的联系人
根据这个游乐场,可以将OAuth2.0与google contact api一起使用,但我不知道如何将https:// www.google.com/m8/feeds添加到我的范围,该范围不会出现在名单上。
还有其他办法吗?
答案 0 :(得分:4)
如果您仍然可以使用此问题,请参阅以下示例代码:oauth2和Google Contact API v3:
import gdata.contacts.client
from gdata.gauth import AuthSubToken
from oauth2client import tools
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
def oauth2_authorize_application(client_secret_file, scope, credential_cache_file='credentials_cache.json'):
"""
authorize an application to the requested scope by asking the user in a browser.
:param client_secret_file: json file containing the client secret for an offline application
:param scope: scope(s) to authorize the application for
:param credential_cache_file: if provided or not None, the credenials will be cached in a file.
The user does not need to be reauthenticated
:return OAuth2Credentials object
"""
FLOW = flow_from_clientsecrets(client_secret_file,
scope=scope)
storage = Storage(credential_cache_file)
credentials = storage.get()
if credentials is None or credentials.invalid:
# Run oauth2 flow with default arguments.
credentials = tools.run_flow(FLOW, storage, tools.argparser.parse_args([]))
return credentials
SCOPES = ['https://www.google.com/m8/feeds/', 'https://www.googleapis.com/auth/userinfo.email']
credentials = oauth2_authorize_application('client-secret.json', scope=SCOPES)
token_string = credentials.get_access_token().access_token
# deprecated!
# auth_token = AuthSubToken(token_string, SCOPES)
with open('client-secret.json') as f:
oauth2_client_secret = json.load(f)
auth_token = gdata.gauth.OAuth2Token(
client_id=oauth2_client_secret['web']['client_id'],
client_secret=oauth2_client_secret['web']['client_secret'],
scope=SCOPES,
user_agent='MyUserAgent/1.0',
access_token=credentials.get_access_token().access_token,
refresh_token=credentials.refresh_token)
client = gdata.contacts.client.ContactsClient(auth_token=auth_token)
query = gdata.contacts.client.ContactsQuery()
答案 1 :(得分:1)
请求应如下所示:
https://accounts.google.com/o/oauth2/auth?
scope=https%3A%2F%2Fwww.google.com%2Fm8%2Ffeeds&
state=<myState>&
redirect_uri=<Redirect URI>&
response_type=code&
client_id=<my Client ID>&approval_prompt=force
这将获得对用户联系人的读/写访问权。