Google Discovery API В запросе отсутствует действительный ключ API - PullRequest
8 голосов
/ 11 июля 2019

Мы использовали API Google Discovery для настройки аналитики, чтобы сделать запрос: "https://analytics.googleapis.com/$discovery/rest?version=v4" Это работает нормально уже более двух лет, однако только сегодня он начал отвечать:

googleapiclient.errors.HttpError: <HttpError 403 when requesting https://analytics.googleapis.com/$discovery/rest?version=v4 returned "The request is missing a valid API key.">

Я не могу найти какой-либо статус на этом API, но мне кажется, что что-то могло измениться.

Ручное тестирование было выполнено, и я копировал вопрос последовательно.

>>> credentials = oauth2client.client.GoogleCredentials("<redacted>", "<redacted>", "<redacted>", "<redacted>", None, "https://accounts.google.com/o/oauth2/token", "UserAgentHere")

>>> credentials
<oauth2client.client.GoogleCredentials object at 0x7f533eaf60b8>

>>> import httplib2

>>> http = credentials.authorize(http=httplib2.Http())

>>> http
<httplib2.Http object at 0x7f533eaf6390>

>>> from apiclient.discovery import build

>>> build("analytics", "v4", http=http, cache_discovery=False)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.6/site-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/googleapiclient/discovery.py", line 232, in build
    raise e
  File "/usr/lib/python3.6/site-packages/googleapiclient/discovery.py", line 224, in build
    requested_url, discovery_http, cache_discovery, cache, developerKey)
  File "/usr/lib/python3.6/site-packages/googleapiclient/discovery.py", line 277, in _retrieve_discovery_doc
    raise HttpError(resp, content, uri=actual_url)
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://analytics.googleapis.com/$discovery/rest?version=v4 returned "The request is missing a valid API key.">
>>>

Ответы [ 2 ]

7 голосов
/ 17 июля 2019

Попробуйте изменить discoveryServiceUrl на

https://analyticsreporting.googleapis.com/$discovery/rest?version=v4'

Пример:

build("analytics", "v4", http=http, cache_discovery=False, 
    discoveryServiceUrl='https://analyticsreporting.googleapis.com/$discovery/rest?version=v4'
)

но работает только для отчетов, а не для API управления

Обновление

Вы также можете изменить название службы с «аналитика» на «аналитика».

build("analyticsreporting", "v4", http=http, cache_discovery=False,)

'analytics' имя службы использовалось для 'api version 3' и было одинаковым для всех областей. Если вы используете 'ядро отчетности api v4' , вам следует изменить имя на 'analyticsreporting' .

2 голосов
/ 17 июля 2019

Хотя ответ от Андрея Аводова работает, я считаю, что правильнее заменить «аналитику» на «аналитику»

, то есть заменить

build("analytics", "v4", http=http, cache_discovery=False)

на

build("analyticsreporting", "v4", http=http, cache_discovery=False)

Версия «аналитика» работала у меня годами, но сегодня утром перестала работать.Замена его новым кодом исправила это.

Это в соответствии с руководством по быстрому запуску v4 https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/service-py

Это также связано с кодом обнаружения, который уже имеет URL обнаружения в правильномформат (при условии, что вы передаете analyticsreporting

V2_DISCOVERY_URI = ('https://{api}.googleapis.com/$discovery/rest?'
                    'version={apiVersion}')

...
snip
...


for discovery_url in (discoveryServiceUrl, V2_DISCOVERY_URI,):
    requested_url = uritemplate.expand(discovery_url, params)

из https://github.com/googleapis/google-api-python-client/blob/b854ff13c801b98f97ff3b9a2ddbd9af54724b9a/googleapiclient/discovery.py

Я предполагаю, что версия аналитики устарела / не работает, но, учитывая, что быстрый запуск использует analyticsreportingверсия выглядит как более безопасное / более полное изменение, чем обновление URL-адреса обнаружения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...