Google Contacts API不能与库一起使用,因为google-api-python-client
它是Google Data API,而google-api-python-client
旨在与基于发现的 API一起使用。
无需经历@NikolayFominyh描述的所有麻烦,您可以在gdata-python-client
.
要获取有效令牌,请按照 Google Developers博客文章中的说明深入了解该过程。
首先,创建一个令牌对象:
import gdata.gauth
CLIENT_ID = 'bogus.id' # Provided in the APIs console
CLIENT_SECRET = 'SeCr3Tv4lu3' # Provided in the APIs console
SCOPE = 'https://www.google.com/m8/feeds'
USER_AGENT = 'dummy-sample'
auth_token = gdata.gauth.OAuth2Token(
client_id=CLIENT_ID, client_secret=CLIENT_SECRET,
scope=SCOPE, user_agent=USER_AGENT)
然后,使用此令牌授权您的应用程序:
APPLICATION_REDIRECT_URI = 'http://www.example.com/oauth2callback'
authorize_url = auth_token.generate_authorize_url(
redirect_uri=APPLICATION_REDIRECT_URI)
生成 this 后authorize_url
,您(或您的应用程序的用户)将需要访问它并接受 OAuth 2.0 提示。如果这是在 Web 应用程序中,您可以简单地重定向,否则您需要在浏览器中访问该链接。
授权后,将代码换成token:
import atom.http_core
redirect_url = 'http://www.example.com/oauth2callback?code=SOME-RETURNED-VALUE'
url = atom.http_core.ParseUri(redirect_url)
auth_token.get_access_token(url.query)
在您访问浏览器的情况下,您需要将重定向到的 URL 复制到变量redirect_url
.
如果您在 Web 应用程序中,您将能够指定路径的处理程序/oauth2callback
(例如),并且可以简单地检索查询参数code
以交换令牌的代码。例如,如果使用WebOb
:
redirect_url = atom.http_core.Uri.parse_uri(self.request.uri)
最后用这个令牌授权你的客户:
import gdata.contacts.service
client = gdata.contacts.service.ContactsService(source='appname')
auth_token.authorize(client)
更新(原始答案后 12 个月以上):
或者,您可以使用我在博客文章google-api-python-client
中描述的支持。