Как предоставить возможность загружать субтитры на YouTube

У меня есть скрипт Python, который загружает видео и миниатюры, следуя документации , и он работает. Я хочу адаптировать его для загрузки титров или субтитров. Следуя этой сути, это кажется простым:

youtube = get_authenticated_service(args)

def upload(youtube, filepath, language, video_id):
  youtube.captions().insert(
    part = "snippet",
    body = {
      "snippet": {
        "videoId": video_id,
        "language": language,
        "name": "Subtitles"
      }
    },
    media_body=filepath
  ).execute()

Этот код завершается с ошибкой:

{
  "error": {
    "code": 403,
    "message": "Request had insufficient authentication scopes.",
    "errors": [
      {
        "message": "Insufficient Permission",
        "domain": "global",
        "reason": "insufficientPermissions"
      }
    ],
    "status": "PERMISSION_DENIED"
  }
}

Поэтому я пытаюсь разрешить моему приложению разрешение на субтитры. [Документация] предлагает следующие области применения:

Авторизация

Для этого запроса требуется авторизация хотя бы с одной из следующих областей (подробнее об аутентификации и авторизации читайте здесь).

Объем

https://www.googleapis.com/auth/youtube.force-sslhttps://www.googleapis.com/auth/youtubepartner

Я не думаю, что смогу предоставить себе статус партнера YouTube, и не понимаю, какое отношение к этому имеет SSL.

Панель управления Google Cloud Console для моего приложения не показывает результатов для «областей», когда я ищу их на верхней панели. Когда я ищу «OAuth», я вижу страницы для Enabled APIs and services и Credentials, но не вижу областей.

Как я могу разрешить приложению, которое уже загружает видео и миниатюры, также загружать субтитры?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
107
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Объем

https://www.googleapis.com/auth/youtube.force-sslhttps://www.googleapis.com/auth/youtubepartner

Сначала добавьте их в свой проект. Откройте экран согласия OAuth, и на второй странице вы найдете области действия. Найдите YouTube, и вы найдете там обе области, как показано на следующем снимке экрана.

Затем вам также необходимо включить их в свой код. Например, вам нужно будет изменить руководство, чтобы добавить эти области действия в аргумент scope:

def get_authenticated_service_for_subtitles(args):
  flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE,
    scope=[
     "https://www.googleapis.com/auth/youtube.upload",
     "https://www.googleapis.com/auth/youtube.force-ssl",
     "https://www.googleapis.com/auth/youtubepartner",  # Optional, for channels you don't own.
    ],
    message=MISSING_CLIENT_SECRETS_MESSAGE)

Как вы упомянули, вам не нужна область youtubepartner, если вы добавляете субтитры на свой собственный канал. Если вы добавляете данные в каналы, которыми управляете, вам понадобится область youtubepartner.

Требуется ли согласие OAuth? В моем приложении его нет, но я могу загружать видео и миниатюры, поэтому я хотел бы также загрузить субтитры.

emonigma 22.04.2024 22:58

Действительно, я подтверждаю, что это чувствительные области. Я создал экран согласия OAuth, добавил эти области, запустил приложение Python, прошел аутентификацию, но получаю следующую ошибку: Authentication successful. An error occurred: <HttpError 403 when requesting https://youtube.googleapis.com/upload/youtube/v3/captions?pa‌​rt=snippet&alt=json&‌​uploadType=multipart returned "Request had insufficient authentication scopes.". Details: "[{'message': 'Insufficient Permission', 'domain': 'global', 'reason': 'insufficientPermissions'}]">. У вас есть идеи, как это исправить?

emonigma 23.04.2024 19:26

@emonigma, не могли бы вы указать, что вы передаете в качестве областей в этом вызове? поток Python = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secre‌​ts_file(CLIENT_SECRE‌​TS_FILE, области). Я предполагаю, что вы используете тот же метод аутентификации из этой сути. Обязательно добавьте к этому необходимые области (и если у вас уже есть токен, хранящийся локально, возможно, удалите его перед аутентификацией и созданием нового). Кроме того, вы добавили обе области на экран согласия, верно?

Herivelton Andreassa 23.04.2024 22:00

Другие вопросы по теме