Я пытаюсь подключиться к API YouTube Analytics с помощью Python. Когда я перейду в консоль разработчика Google на вкладке «Учетные данные», нажмите на раскрывающееся меню Create credentials
и выберите Help me choose
. Я нажимаю на API, который я хочу использовать (YouTube Analytics API
), откуда я буду звонить (Other non-UI (e.g. cron job, daemon)
), какие данные я буду получать (Application Data
), а затем использую ли я Google App Engine (no
). Я нажимаю на кнопку, чтобы узнать, какие учетные данные мне нужны, и она сообщает мне You alread have credentials that are suitable for this purpose
.Ошибка авторизации API Google (учетной записи службы): HttpAccessTokenRefreshError: unauthorized_client: неавторизованный клиент или область в запросе
У меня есть Service account
, который я использую для подключения к API-интерфейсу Google Search Console для доступа к данным для нескольких сайтов, которыми владеет моя компания. Поскольку у нас есть несколько сайтов, я использую делегированные учетные данные на основе моего адреса электронной почты. Это код, который я использую для проверки подлинности в API поиска консоли:
from httplib2 import Http
from oauth2client.service_account import ServiceAccountCredentials
from apiclient.discovery import build
scopes = ['https://www.googleapis.com/auth/webmasters.readonly']
credentials = ServiceAccountCredentials.from_json_keyfile_name('keyfile.json', scopes=scopes)
delegated_credentials = credentials.create_delegated('<my-email>')
http_auth = delegated_credentials.authorize(Http())
webmasters_service = build('webmasters', 'v3', http=http_auth)
Теперь я пытаюсь использовать аналогичный подход с API YouTube Analytics, но я получаю эту ошибку: HttpAccessTokenRefreshError: unauthorized_client: Unauthorized client or scope in request.
. Вот мой код:
from httplib2 import Http
from oauth2client.service_account import ServiceAccountCredentials
from apiclient.discovery import build
START_DATE = "2016-09-01"
END_DATE = "2016-09-30"
scopes = ['https://www.googleapis.com/auth/yt-analytics.readonly']
credentials = ServiceAccountCredentials.from_json_keyfile_name('keyfile.json', scopes=scopes)
delegated_credentials = credentials.create_delegated('<my-email>')
http_auth = delegated_credentials.authorize(Http())
youtube_service = build('youtubeAnalytics', 'v1', http=http_auth)
analytics_query_response = youtube_service.reports().query(
ids="channel==<my-youtube-channel-id>",
metrics="views",
start_date=START_DATE,
end_date=END_DATE
).execute()
keyfile.json
тот же файл (содержащий учетные данные учетной записи службы), которые я использую для подключения к API Search Console. Я даже попытался создать новую учетную запись службы и использовать эти учетные данные, но мне не повезло. И да, я включил все API-интерфейсы YouTube в консоли разработчика.
У вас есть идея, почему я получаю ошибку HttpAccessTokenRefreshError: unauthorized_client: ...
?
Редактировать: Раньше я использовал идентификатор OAuth, а не учетную запись службы, когда я запускал свой сценарий, была показана вкладка браузера, и мне пришлось выбирать учетную запись. Мне были представлены два варианта: один был моим адресом электронной почты, другой - учетной записью YouTube, которую я добавил в качестве менеджера. Считаете ли вы, что я получаю эту ошибку, потому что я использую свой адрес электронной почты для создания учетных данных (а не учетной записи YouTube)?
изменить2: похоже, что учетная запись YouTube не может подпадать под сферу действия нашего домена Google Apps. Таким образом, возможно, поэтому я не могу разрешить использование моего адреса электронной почты, хотя я был назначен Менеджером этой учетной записи YouTube с этим адресом электронной почты.
Вы включили доступ с консоли с вашего IP-адреса – MatejMecka
@UnknownDeveloper Я не уверен, как именно это сделать, но не получаю ли я такую же ошибку при подключении к API-интерфейсу Google Search Console? У меня нет никаких проблем с API-интерфейсом Search Console, только API YouTube Analytics. FYI Я добавил дополнительную информацию в свой quesiton, описывающий, что произошло, когда я использовал подход OAuth. – Abundnce10