Ошибка 403 при доступе к Google My Business API через служебную учетную запись

Я работаю над проектом, в котором мы хотим собирать данные о производительности GMB через API GMB. Это влечет за собой захват многих результатов reportInsights. Мы не создаем и не обновляем какие-либо записи для этого аккаунта. Однако я попробовал подход Oauth2, который требовал от меня разрешения, и, поскольку мы не осуществляем доступ или обновление каких-либо пользовательских данных, я бы хотел избежать Oauth.

Исходя из документации и для этого варианта использования, я считаю, что учетная запись службы является лучшим подходом, и я создал эти учетные данные в консоли API Google.

Я могу создать учетные данные, однако, когда я запускаю процесс, я получаю следующую ошибку:

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

Это кажется странным, поскольку у меня есть действительный набор учетных данных учетной записи службы. Я включил действительный ключ API из консоли Google API, но получаю ту же ошибку.

Вот мой код Python:

import os
import httplib2
import json
import argparse
import apiclient.discovery

from oauth2client.service_account import ServiceAccountCredentials

from apiclient.discovery import build

api_name = 'mybusiness'
api_version = 'v3'
api_key = '<my valid api key from google api console that has permission for this GMB project>'

discovery_uri = 'https://mybusiness.googleapis.com/$discovery/rest?version={}'.format(api_version)

flow_scope='https://www.googleapis.com/auth/plus.business.manage'

credentials_file = '/Google_My_Business-service_account.json' # the service account credentials from the Google API console that have permission for this GMB project 

credentials = ServiceAccountCredentials.from_json_keyfile_name(credentials_file, scopes=flow_scope)

print("credentials: ", credentials)

http = credentials.authorize(httplib2.Http())
print("http: ", http)

# Build the service object
service = build(api_name, api_version, http=http, developerKey=api_key, discoveryServiceUrl=discovery_uri)

Ошибка выдается с последней строки. Любая помощь приветствуется.

2 ответа

Попробуйте изменить свой код на следующий

from oauth2client.client import AccessTokenCredentials
credentials = AccessTokenCredentials('<an access token>', 'my-user-agent/1.0')
http = httplib2.Http() 
http = credentials.authorize(http)

Затем, если это работает, попробуйте следующее, чтобы получить учетные данные из файла JSON

from oauth2client.client import AccessTokenCredentials
credentials = AccessTokenCredentials.from_json(credentials_file)
http = httplib2.Http()
http = credentials.authorize(http)

Проблема с URL-адресом службы обнаружения. Кажется, что к частному apis нельзя получить доступ через сервис discovery api (даже если вы используете apikeys). Таким образом, решение заключается в том, чтобы изменить URL-адрес службы обнаружения на действительный файл json, отображающий службу mybusiness.

discovery_uri = "https://developers.google.com/my-business/samples/mybusiness_google_rest_v3p3.json"
Другие вопросы по тегам