1

Python+DjangoとOAuth2でGoogleDocsAPIを使用しようとしています。Google-api-python-clientを介してOAuthアクセストークンなどを取得しています。コードは基本的にhttp://codeからコピーされています。 google.com/p/google-api-python-client/source/browse/samples/django_sample/plus/views.py

ここで、google gdata API、v2.0.17を使用する必要があると思います。その場合、gdataクライアントを使用して行われたクエリを承認する方法を正確に見つけることができません。http://packages.python.org/gdata/docs/auth.html#upgrading-to-an-access-token (とにかく古くなっているように見えます)のドキュメントでは、クライアントのauth_token属性を次のインスタンスに設定するとしています。 gdata.oauth.OAuthToken。その場合、OAuthTokenにどのパラメーターを渡す必要がありますか?

つまり、OAuthアクセストークンを指定して、gdataAPIを使用して行われたクエリを承認する方法の簡単な例を探しています。

4

2 に答える 2

5

OAuth 2.0シーケンスは、次のようなものです(登録済みアプリに対して適切に定義されたアプリケーション定数が与えられた場合)。

  1. リクエストトークンを生成します。

    token = gdata.gauth.OAuth2Token(client_id=CLIENT_ID, 
                                    client_secret=CLIENT_SECRET, 
                                    scope=" ".join(SCOPES), 
                                    user_agent=USER_AGENT)
    
  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: ')
    
  3. アクセストークンを取得します。

    token.get_access_token(access_code)
    
  4. gdataクライアントを作成します。

    client = gdata.docs.client.DocsClient(source=APP_NAME)
    
  5. クライアントを承認します。

    client = token.authorize(client)
    

次の手順を実行することで、後で使用するためにアクセストークンを保存できます(したがって、トークンが再び期限切れになるまで手動認証手順を実行する必要はありません)。

f = open(tokenfile, 'w')
blob = gdata.gauth.token_to_blob(token)
f.write(blob)
f.close()

次回開始するときは、次のようにして保存したトークンを再利用できます。

f = open(tokenfile, 'r')
blob = f.read()
f.close()
if blob:
    token = gdata.gauth.token_from_blob(blob)

次に、認証シーケンスへの唯一の変更は、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)

お役に立てれば。それを解決するのに少し時間がかかりました:-)。

于 2012-06-06T16:48:26.453 に答える
0

これはhttps://developers.google.com/gdata/docs/auth/overviewからのものです:

警告: ほとんどの新しい Google API は Google Data API ではありません。Google Data API のドキュメントは、Google Data API ディレクトリにリストされている古い API にのみ適用されます。特定の新しい API については、その API のドキュメントを参照してください。新しい API を使用したリクエストの承認については、Google アカウントの認証と承認をご覧ください。

認証とアクセスの両方に OAuth を使用するか、両方に OAuth 2.0 を使用する必要があります。

OAuth 2.0 API はhttps://developers.google.com/gdata/docs/directoryにあります。

于 2012-06-06T13:24:31.463 に答える