YouTube Analytics API возвращает 403 запрещенных, даже если токен действителен - PullRequest
0 голосов
/ 29 мая 2018

У меня проблема с доступом к 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.Вот что происходит:

  1. Получение базовой статистики канала с использованием API данных Youtube
  2. Получение расширенной статистики канала с использованием API аналитики Youtube

Моя точка зрения такова,токен обновления успешно заменяется в обоих случаях, но работает только с API данных Youtube.Я намеренно обмениваю это дважды.Тот же самый результат, когда я получаю доступ только к YouTube Analytics API с одним успешным обменом токенами (без вызова Youtube Data API).

И самое забавное то, что этот код работает некоторое время (пару недель или месяцев)) и затем останавливается: -)

API requests

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Учитывая, что вы говорите, что обновление токена работает, но вызов API возвращает ошибку, единственное, что я подозреваю, это некоторая проблема на стороне API.

Вы делаете эти вызовы API со своего сервера?Для скольких пользователей?Возможно, вы работаете с ограничениями на основе IP.Я точно не знаю.

Я думаю, что самый простой способ найти проблему - это послать нам несколько токенов, которые начинают возвращать ошибку.Мы можем искать, если токены стали недействительными или есть проблема на стороне API.Вы можете отправить их по электронной почте oauth-help@google.com

0 голосов
/ 05 июня 2018

Хорошо, давайте начнем с небольшой справочной информации.

Есть несколько причин, по которым токен обновления перестает работать.

  1. Срок действия старых токенов обновления истекает через шесть месяцев, еслине используется.
  2. Пользователь может выполнить повторную проверку вашего приложения и получить новый токен обновления. Оба маркера обновления будут работать, вы можете иметь до пятидесяти ожидающих обновления маркеров, а затем первый перестанет работать.
  3. пользователь может отозвать ваш доступ.
  4. Wakey ошибка летнего времени 2015 года. (мы не будем говорить об этом)

Теперь все это не относится квы.Почему, потому что токен обновления все еще работает, а вы просто падаете в область видимости.Что является сумасшествием, пользователь не может удалить ваш доступ к одной области, и он не истечет одну область.

При этом я веду к тому, что это ошибка.Я отправил электронное письмо кому-то, кого я знаю, кто из команды Oauth.

А пока.У меня есть идея?

Что произойдет, если вы попытаетесь запросить новый токен доступа с помощью токена обновления?Может ли быть проблема с маркером доступа, который был вам возвращен?

...