0

私はこのコードを使用していますが、ほとんどは Google のサンプルから抽出したものです。

"""
did a pip3 install --upgrade google-api-python-client
"""

import httplib2

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

from environments import get_client_id, get_client_secret

# List the scopes your app requires:
SCOPES = ['https://www.googleapis.com/auth/plus.me',
          'https://www.googleapis.com/auth/plus.stream.write']

# The following redirect URI causes Google to return a code to the user's
# browser that they then manually provide to your app to complete the
# OAuth flow.
REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'

# For a breakdown of OAuth for Python, see
# https://developers.google.com/api-client-library/python/guide/aaa_oauth
# CLIENT_ID and CLIENT_SECRET come from your API Console project
flow = OAuth2WebServerFlow(client_id=get_client_id(),  # extracted from console.developers.google.com
                           client_secret=get_client_secret(), # extracted from console.developers.google.com
                           scope=SCOPES,
                           redirect_uri=REDIRECT_URI)

auth_uri = flow.step1_get_authorize_url()

# This command-line server-side flow example requires the user to open the
# authentication URL in their browser to complete the process. In most
# cases, your app will use a browser-based server-side flow and your
# user will not need to copy and paste the authorization code. In this
# type of app, you would be able to skip the next 3 lines.
# You can also look at the client-side and one-time-code flows for other
# options at https://developers.google.com/+/web/signin/
print('Please paste this URL in your browser to authenticate this program.')
print(auth_uri)
code = input('Enter the code it gives you here: ')

# Set authorized credentials
credentials = flow.step2_exchange(code)

# Create a new authorized API client.
http = httplib2.Http()
http = credentials.authorize(http)
service = build('plusDomains', 'v1', http=http)

circle_service = service.circles()
request = circle_service.list(userId='me')

while request is not None:
    circle_list = request.execute()

    if circle_list.get('items') is not None:
        print('Google+ circles for the current user: ')
        circles = circle_list.get('items')
        for circle in circles:
            print('\t %s' % circle.get('displayName'))

    request = circle_service.list_next(request, circle_list)

Google の開発者コンソールから生成された資格情報を返す関数がいくつかあることがわかります。

credentials_console_screenshot

右側の赤いダウンロード ボタンを使用してダウンロードされた JSON 内の client_id と 1 つの client_secret の赤い * マスク文字列を取得します。

したがって、最初はすべて問題なく動作し、Chrome でウィンドウが開き、同意してコマンドラインにコードを貼り付けます。このコードに到達すると、次のようになります。

request.execute()

エラー トレースが表示されます。

Traceback (most recent call last):
  File "/home/madtyn/PycharmProjects/telegram/api_samples/plus/sample_list_circles.py", line 62, in <module>
    circle_list = request.execute()
  File "/home/madtyn/.local/lib/python3.6/site-packages/oauth2client/_helpers.py", line 133, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/home/madtyn/.local/lib/python3.6/site-packages/googleapiclient/http.py", line 842, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/plusDomains/v1/people/me/circles?alt=json returned "Forbidden">

私は基本的な G+ API で同様のコードを実行し、それを機能させましたが、これで行き詰まっています。エラーがどこにあるのかわかりません。私が得た唯一の手がかりは、このインポートが PyCharm で未解決として表示されることです。

from apiclient.discovery import build

何か案は?Google API の指示に従っていない場所が見つかりません。私は読み続けていますが、手がかりがありません。

4

1 に答える 1