1

私はこれを理解しようとして髪を引っ張ってきたので、誰かが助けてくれることを願っています.

サービス アカウントを使用して Google API エンドポイントにアクセスする比較的単純なコードのようですが、Http エラー 500 が発生します。

Tasks API と同じ認証で問題なく動作します。

私のソースコード:

import httplib2
import pprint
import sys

from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials

f = file('key.p12', 'rb')
key = f.read()
f.close()

credentials = SignedJwtAssertionCredentials(
'403695561042-6ntna04usrl5sscg3ovij6t4d8vfvsqp@developer.gserviceaccount.com',
key,
scope='https://www.googleapis.com/auth/apps.order.readonly')

http = httplib2.Http()
http = credentials.authorize(http)
service = build("reseller", "v1", http=http)
lists = service.subscriptions().list().execute(http=http) 
print lists

応答:

HttpError: <unprintable HttpError object>

トレースバック:

Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1701, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1689, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1687, in wsgi_app
    response = self.full_dispatch_request()
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1360, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1358, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1344, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/admin/Sites/newmind/reseller-api/app.py", line 79, in index
    lists = service.subscriptions().list().execute(http=http)
  File "build/bdist.macosx-10.8-intel/egg/oauth2client/util.py", line 120, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "build/bdist.macosx-10.8-intel/egg/apiclient/http.py", line 678, in execute
    raise HttpError(resp, content, uri=self.uri)

コードを Google サンプルから直接コピーし、サービスと認証の名前を変更しただけです。 http://code.google.com/p/google-api-python-client/source/browse/samples/service_account/tasks.py タスク API は、同じ認証情報で http 200 を返します。

かなり標準的な httplib2 リクエストを使用すると、次のような応答が得られます。

WARNING:oauth2client.util:new_request() takes at most 1 positional argument (2 given)
    {'status': '500', 'content-length': '52', 'x-xss-protection': '1; mode=block', 'x-content-type-options': 'nosniff', 'expires': 'Sat, 20 Oct 2012 06:25:19 GMT', 'server': 'GSE', '-content-encoding': 'gzip', 'cache-control': 'private, max-age=0', 'date': 'Sat, 20 Oct 2012 06:25:19 GMT', 'x-frame-options': 'SAMEORIGIN', 'content-type': 'application/json; charset=UTF-8'}
    {
     "error": {
      "code": 500,
      "message": null
     }
    }

誰かが助けてくれたら、とても感謝しています。

ありがとう

4

2 に答える 2

2

少し大雑把ですが、プロジェクト コンソールで Reseller API を有効にしましたか? 最初に使用したサービス以外のサービスにアクセスしようとしたときに、同様の問題が発生したことを覚えています。

編集: 以下のコメントによると、別の解決策は Flow を使用し、 を に設定しaccess_typeoffline、ユーザーが常に再認証する必要なくトークンを更新できるようにすることでした。

于 2012-10-20T22:26:02.923 に答える
0

フローを使用せずに、次のことができます。

取得しているエラーは、a) API に対して正しく認証されているが、b) 使用しているユーザーが、アクセスしようとしているアカウントにアクセスできないという事実によるものです。

これと同じ問題がありました。OAuth2 サービス アカウントのメール アドレスを Analytics アカウントのユーザーに追加することで解決しました。

アクセスするアカウントごとに、これを個別に追加する必要があります。

于 2013-02-03T19:21:43.090 に答える