У меня проблема с доступом к YouTube Analytics API для случайных каналов YouTube.
После успешной авторизации со следующими областями:
Я сохраняю token
и refresh token
в базе данных.Все работает хорошо в течение некоторого времени.Через некоторое время (например, три месяца), когда мое приложение отправляет запрос, Google возвращает 403:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "Forbidden"
}
],
"code": 403,
"message": "Forbidden"
}
}
, но только для Youtube Analytics API, другие конечные точки в Youtube Data API отлично работают с этим маркером.Это происходит для случайных аккаунтов (каналов).Владельцы этих каналов не аннулировали доступ к моему приложению, не меняли пароль учетной записи и т. Д.
Эта проблема затрагивает около 40% всех каналов в моем приложении (время, когда Youtube Analytics API перестает работать, отличаетсяот 1 до 6 месяцев после получения токена OAuth2).Затем я должен периодически отправлять им новый URL-адрес авторизации.
В чем проблема?
Вот так я генерирую URL-адрес авторизации и выполняю запросы:
URL-адрес аутентификации:
flow = client.flow_from_clientsecrets(
secret_file_path,
scope=["https://www.googleapis.com/auth/youtube.readonly",
"https://www.googleapis.com/auth/yt-analytics.readonly"],
redirect_uri=redirect_url,
prompt="consent"
)
flow.params["access_type"] = "offline"
url = flow.step1_get_authorize_url(state=state)
Запрос статистики:
auth = client.OAuth2Credentials.from_json(credentials_from_db)
http_auth = auth.authorize(httplib2.Http())
api = discovery.build("youtubeAnalytics", "v1", http=http_auth,
cache_discovery=False)
api.reports().query(
ids="channel==%s" % channel_id,
metrics="estimatedMinutesWatched",
dimensions="video",
start_date=start_date,
end_date=end_date,
max_results=20,
filters="video=={}".format(",".join(video_ids))
).execute(http=http)
Я использую google-api-python-client1.6.5
Редактировать
Я прикрепил скриншот при отладке запросов к API Google с помощью google-api-python-client
.Вот что происходит:
- Получение базовой статистики канала с использованием API данных Youtube
- Получение расширенной статистики канала с использованием API аналитики Youtube
Моя точка зрения такова,токен обновления успешно заменяется в обоих случаях, но работает только с API данных Youtube.Я намеренно обмениваю это дважды.Тот же самый результат, когда я получаю доступ только к YouTube Analytics API с одним успешным обменом токенами (без вызова Youtube Data API).
И самое забавное то, что этот код работает некоторое время (пару недель или месяцев)) и затем останавливается: -)
![API requests](https://i.stack.imgur.com/jOMIh.png)