2016-10-13 2 views
1

Я пытаюсь подключиться к 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 с этим адресом электронной почты.

+0

Вы включили доступ с консоли с вашего IP-адреса – MatejMecka

+0

@UnknownDeveloper Я не уверен, как именно это сделать, но не получаю ли я такую ​​же ошибку при подключении к API-интерфейсу Google Search Console? У меня нет никаких проблем с API-интерфейсом Search Console, только API YouTube Analytics. FYI Я добавил дополнительную информацию в свой quesiton, описывающий, что произошло, когда я использовал подход OAuth. – Abundnce10

ответ

2

Я нашел на этом documentation, что вы не можете использовать учетную запись службы с API YouTube Analytics.

Утверждается, что здесь:

The service account flow supports server-to-server interactions that do not access user information. However, the YouTube Analytics API does not support this flow. Since there is no way to link a Service Account to a YouTube account, attempts to authorize requests with this flow will generate an error.

Я также нашел его в этом thread ответил на Googler.

Для получения дополнительной информации, проверьте это SO question.

+0

Nice find, KENdi! Я не заметил этого, прочитав раздел «Учетные записи службы» документации авторизации. Итак, нужно ли использовать OAuth для аутентификации? Это возможно с сервера, на котором выполняется задание cron? – Abundnce10

Смежные вопросы