使用Google文档列表API,Python和OAuth 2进行身份验证

Jor*_*Wii 1 python google-docs-api oauth-2.0

我正在尝试使用带有Python + Django和OAuth 2的Google Docs API.我通过google-api-python-client获得了OAuth访问令牌,其代码基本上是从http:// code复制的. google.com/p/google-api-python-client/source/browse/samples/django_sample/plus/views.py

现在,我假设我应该使用谷歌gdata API,v 2.0.17.如果是这样,我无法确切地找到如何授权使用gdata客户端进行的查询.http://packages.python.org/gdata/docs/auth.html#upgrading-to-an-access-token(无论如何看似过时)的文档说,将客户端上的auth_token属性设置为实例gdata.oauth.OAuthToken.如果是这种情况,我应该将哪些参数传递给OAuthToken?

简而言之,我正在寻找一个关于如何在给定OAuth访问令牌的情况下授权使用gdata API进行查询的简短示例.

小智 5

OAuth 2.0序列类似于以下内容(给定已注册应用程序的适当定义的应用程序常量).

  1. 生成请求令牌.

    token = gdata.gauth.OAuth2Token(client_id=CLIENT_ID, 
                                    client_secret=CLIENT_SECRET, 
                                    scope=" ".join(SCOPES), 
                                    user_agent=USER_AGENT)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 授权请求令牌.对于简单的命令行应用程序,您可以执行以下操作:

    print 'Visit the following URL in your browser to authorise this app:'
    print str(token.generate_authorize_url(redirect_url=REDIRECT_URI))
    print 'After agreeing to authorise the app, copy the verification code from the browser.'
    access_code = raw_input('Please enter the verification code: ')
    
    Run Code Online (Sandbox Code Playgroud)
  3. 获取访问令牌.

    token.get_access_token(access_code)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 创建一个gdata客户端.

    client = gdata.docs.client.DocsClient(source=APP_NAME)
    
    Run Code Online (Sandbox Code Playgroud)
  5. 授权客户.

    client = token.authorize(client)
    
    Run Code Online (Sandbox Code Playgroud)

您可以通过执行以下操作来保存访问令牌以供以后使用(因此避免必须执行手动身份验证步骤,直到令牌再次到期):

f = open(tokenfile, 'w')
blob = gdata.gauth.token_to_blob(token)
f.write(blob)
f.close()
Run Code Online (Sandbox Code Playgroud)

下次启动时,您可以通过执行以下操作重用已保存的令牌:

f = open(tokenfile, 'r')
blob = f.read()
f.close()
if blob:
    token = gdata.gauth.token_from_blob(blob)
Run Code Online (Sandbox Code Playgroud)

然后,对验证序列的唯一更改是通过指定refresh_token参数将此令牌传递给OAuth2Token:

token = gdata.gauth.OAuth2Token(client_id=CLIENT_ID, 
                                client_secret=CLIENT_SECRET, 
                                scope=" ".join(SCOPES), 
                                user_agent=USER_AGENT,
                                refresh_token=token.refresh_token)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.花了一段时间来解决这个问题:-).