У меня есть скрипт 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
, но не вижу областей.
Как я могу разрешить приложению, которое уже загружает видео и миниатюры, также загружать субтитры?
Согласно документации 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, добавил эти области, запустил приложение Python, прошел аутентификацию, но получаю следующую ошибку: Authentication successful. An error occurred: <HttpError 403 when requesting https://youtube.googleapis.com/upload/youtube/v3/captions?part=snippet&alt=json&uploadType=multipart returned "Request had insufficient authentication scopes.". Details: "[{'message': 'Insufficient Permission', 'domain': 'global', 'reason': 'insufficientPermissions'}]">
. У вас есть идеи, как это исправить?
@emonigma, не могли бы вы указать, что вы передаете в качестве областей в этом вызове? поток Python = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, области). Я предполагаю, что вы используете тот же метод аутентификации из этой сути. Обязательно добавьте к этому необходимые области (и если у вас уже есть токен, хранящийся локально, возможно, удалите его перед аутентификацией и созданием нового). Кроме того, вы добавили обе области на экран согласия, верно?
Требуется ли согласие OAuth? В моем приложении его нет, но я могу загружать видео и миниатюры, поэтому я хотел бы также загрузить субтитры.