API YouTube - доступ к нескольким каналам YouTube (учетные записи брендов) с помощью учетной записи администратора Google

Мне нужно извлечь информацию из видео с помощью YouTube Analytics и Reporting Api.

У меня есть доступ к нескольким учетным записям YouTube, когда я захожу на YouTube с помощью своей учетной записи Google.

Используя "Try it" для тестирования API, я могу получить данные для канала только после переключения на учетную запись бренда, которой принадлежит этот канал, в противном случае я получаю 403 - Запрещенная ошибка.

Есть ли способ извлечь данные, используя учетную запись Google, которую я использую для входа? Поскольку после создания учетных данных в консоли разработчика они будут связаны с учетной записью Google, а не с учетными записями бренда.

В моем аккаунте Google есть роль менеджера в аккаунтах брендов.

Я ищу поле onBehalfOfContentOwner, которое будет использоваться в запросах, но я не знаю, как получить этот идентификатор, и я не уверен, применимо ли это в моих ситуациях, так как мы говорим об учетных записях брендов, правильно мне, если я ошибаюсь.

4 ответа

Я боролся с этим всего два дня назад. Оказывается, это возможно, просто недокументировано и работает немного иначе, чем вы ожидаете:

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

У меня было точно такое же неправильное представление, когда я впервые попробовал (даже дошел до того, что узнал client_id бренда). Оказывается, вы не хотите использовать информацию oauth бренда - вы хотите использовать свой собственный client_id/client_secret для создания токена обновления от имени учетной записи бренда, а затем использовать его для создания токенов аутентификации.

шаги:

  1. Используя свой основной аккаунт, создайте oauth client_id и client_secret через https://console.developers.google.com/apis/credentials
  2. Измените только что добавленную запись client_id/client_secret и добавьте " https://developers.google.com/oauthplayground" в "URI авторизованного перенаправления" в нижней части страницы.
  3. Мы собираемся создать токен обновления ленивым способом. Перейдите на https://developers.google.com/oauthplayground/.
  4. Нажмите на шестеренки в правом верхнем углу и установите тип доступа "offline", затем нажмите "Использовать свои собственные учетные данные OAuth" и введите client_id и client_secret, которые вы создали на шаге 1.
  5. Выберите области, к которым вы хотите предоставить доступ. Нажмите авторизовать API.
  6. Вот магический бит: теперь вас попросят "Выбрать аккаунт". Выберите здесь учетную запись бренда, к которой вы хотите получить доступ, а НЕ свою основную учетную запись. Поскольку у вас есть разрешение на доступ к нему, это будет работать нормально, даже если вы используете свои собственные client_id и client_secret
  7. Разрешите доступ к разрешению, когда он вас попросит, и вы вернетесь на игровую площадку.
  8. Нажмите "Код авторизации Exchange для токенов"
  9. Возьмите токен обновления и используйте его, как обычно, для создания токенов аутентификации по мере необходимости.

Поздравляем, теперь у вас есть доступ к аккаунту бренда!

Надеюсь, это поможет.

API YouTube отличается от других API Google. С другими API вы аутентифицируете доступ к полной учетной записи. Однако с YouTube API его канал основан. Вам нужно будет аутентифицировать свое приложение один раз для каждого канала.

onBehalfOfContentOwner

Этот параметр предназначен для контент-партнеров YouTube, которые владеют и управляют многими различными каналами YouTube. Это позволяет владельцам контента проходить аутентификацию один раз и получать доступ ко всем своим видео и данным канала без необходимости предоставления учетных данных для аутентификации для каждого отдельного канала. Фактическая учетная запись CMS, с которой пользователь аутентифицируется, должна быть связана с указанным владельцем контента YouTube.

Вы должны быть партнером YouTube, чтобы связаться с менеджером своего аккаунта и получить идентификатор CMS. Мне еще предстоит выяснить, какую магию нужно архивировать, чтобы стать партнером YouTube.

Я дам обновленную информацию о невероятном ответе @Paolo. В моем случае я пытался получить свои личные видео, используя Playlist.listAPI Я никогда не видел такого плохо документированного, глупого и запутанного API, как API YouTube.

Контекст: у меня есть основная учетная запись Google, к которой привязаны мои учетные данные API YouTube (для учетных записей брендов YouTube нет учетных записей разработчиков Google), но я хотел бы получить частные плейлисты (и видео) для моей учетной записи YouTube (аккаунт бренда) . mine=true, , channelId, onBehalfOfContentOwner, а также onBehalfOfContentOwnerChannelвсе НИЧЕГО не сделали для меня. Я получал либо общедоступные плейлисты, либо ошибки API с различными комбинациями и значениями этих параметров.

В конце концов, это были шаги, которые я предпринял, чтобы запустить скрипт узла для получения частных видео из моей учетной записи бренда:

  1. Перейдите на https://console.developers.google.com/ для своей основной учетной записи Google.
  2. На боковой панели перейдите в «API и службы», затем «Учетные данные».
  3. Вверху нажмите «+Создать учетные данные», затем «Учетная запись службы».
  4. В разделе «Сведения об учетной записи службы» введите любое имя, затем нажмите «Создать и продолжить».
  5. В разделе «Предоставить этой учетной записи службы доступ к проекту» нажмите «Продолжить».
  6. В разделе «Предоставить пользователям доступ к этому сервисному аккаунту» нажмите «Готово».
  7. На главной странице учетных данных, которая загружается, щелкните вновь созданную учетную запись службы в разделе «Учетные записи служб».
  8. На вкладках нажмите Ключи
  9. Нажмите кнопку «Добавить ключ», затем «Создать новый ключ».
  10. Сохраните JSON, затем нажмите «Создать».
  11. Сохраните файл как client-key.json в корне вашего проекта nodejs.
  12. Перейдите на страницу https://developers.google.com/oauthplayground.
  13. Прокрутите вниз области и выберите YouTube Data API v3 v3, затем https://www.googleapis.com/auth/youtubeа также https://www.googleapis.com/auth/youtube.readonly.
  14. В появившемся окне нажмите на свой аккаунт YouTube (бренд), затем разрешите
  15. На следующем шаге нажмите Код авторизации Exchange для токенов.
  16. Скопируйте токен доступа
  17. Вернитесь к скрипту вашего узла и используйте его следующим образом:
        const auth = new google.auth.GoogleAuth({
    keyFile: "client-key.json",
    scopes: [
      "https://www.googleapis.com/auth/youtube",
      "https://www.googleapis.com/auth/youtube.force-ssl",
      "https://www.googleapis.com/auth/youtube.readonly",
      "https://www.googleapis.com/auth/youtubepartner",
      "https://www.googleapis.com/auth/youtubepartner-channel-audit",
    ],
  })

  const authClient = await auth.getClient()
  google.options({ auth: authClient })

  const youtube = google.youtube("v3")

  const token = "your token here"

  const results = await youtube.playlists.list({
    part: [
      "snippet",
      "id",
      "contentDetails",
      "status",
      "localizations",
      "status",
    ],
    mine: true,
    auth: token,
    oauth_token: token,
    maxResults: 50,
  })

Примечание mine: trueи что токен должен быть передан ОБОИМ authа также oauth_token, но нет key. Если какой-либо параметр отсутствует, вызов завершится ошибкой. (Почему? Понятия не имею. Пожалуйста, скажите мне.) Кроме того, вы должны постоянно обновлять свой токен доступа на игровой площадке после истечения срока его действия.

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

PS Я полагаю, что перед этим требовались дополнительные вещи, такие как включение API YouTube и выполнение каких-либо действий на экране согласия OAUTH, но я слишком устал от этого, чтобы продолжать. Надеюсь, UX консоли Google будет достаточно, чтобы провести вас через эти шаги, хотя, честно говоря, я сомневаюсь в этом.

Надеюсь, это поможет и удачи , потому что вам это может понадобиться.

Если вы следуете решению для получения постоянного токена обновления и используете Java, это работает для меня

GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
                    .setJsonFactory(JSON_FACTORY)
                    .setClientSecrets(oauth2ClientId, oauth2ClientSecret)
                    .build()
                    .setRefreshToken(oauth2RefreshToken);


 this.youTubeClient = new YouTube.Builder(httpTransport, JSON_FACTORY, credential)
                    .setApplicationName(APPLICATION_NAME)
                    .build();

Обязательные зависимости

<dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-youtube</artifactId>
    <version>v3-rev212-1.25.0</version>
    </dependency>
<dependency>
    <groupId>com.google.auth</groupId>
    <artifactId>google-auth-library-oauth2-http</artifactId>
    <version>0.18.0</version>
</dependency>

Эти ресурсы также могут помочь, когда у вас будет токен обновления: