Кроки налаштування та Python код для завантаження відео на YouTube [Вибачте, кроки подані в дуже сирому вигляді через обмеження часу]
https://developers.google.com/youtube/v3/getting-started
developers.google.com
Виберіть Python
Вибір Python
pip install --upgrade google-api-python-client
pip install --upgrade google-auth-oauthlib google-auth-httplib2
Створіть проект Google Cloud
console.cloud.google.com
Створення проекту
Вибір проекту
Вибір APIs & Services
Увімкнути
Вибір YouTube Data API v3
Вибір облікових даних
Створення облікових даних
Екран згоди
Інформація про додаток
Додати область доступу
Пошук завантаження
Додати користувачів
Додати користувача
Створення облікових даних
OAuth Client ID
Вибір Desktop
Копіювання Client ID і Client Secret
Перейдіть за посиланням знову на https://developers.google.com/youtube/v3/getting-started
Вибір “Upload a Video”
Створіть файл client_secrets.json, як показано нижче:
{
"web": {
"client_id": "[[INSERT CLIENT ID HERE]]",
"client_secret": "[[INSERT CLIENT SECRET HERE]]",
"redirect_uris": [],
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token"
}
}
Копіюйте та вставте Client ID і Client Secret
Копіюйте приклад коду
developers.google.com
pip install oauth2client
Копіюйте приклад запиту з developers.google.com
Файл app.py
import httplib2
import os
import random
import sys
import time
from apiclient.discovery import build
from apiclient.errors import HttpError
from apiclient.http import MediaFileUpload
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client.tools import argparser, run_flow
httplib2.RETRIES = 1
# Maximum number of times to retry before giving up.
MAX_RETRIES = 10
# Always retry when these exceptions are raised.
RETRIABLE_EXCEPTIONS = (httplib2.HttpLib2Error, IOError)
# Завжди повторюйте спробу, коли виникає apiclient.errors.HttpError з одним з цих статусів
RETRIABLE_STATUS_CODES = [500, 502, 503, 504]
CLIENT_SECRETS_FILE = "client_secrets.json"
YOUTUBE_UPLOAD_SCOPE = "https://www.googleapis.com/auth/youtube.upload"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
MISSING_CLIENT_SECRETS_MESSAGE = """
WARNING: Please configure OAuth 2.0
Щоб цей зразок працював, вам потрібно заповнити файл client_secrets.json
який знаходиться за адресою:
%s
з інформацією з Консолі API
https://console.cloud.google.com/
Для отримання додаткової інформації про формат файлу client_secrets.json, будь ласка, відвідайте:
https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
""" % os.path.abspath(os.path.join(os.path.dirname(__file__),
CLIENT_SECRETS_FILE))
VALID_PRIVACY_STATUSES = ("public", "private", "unlisted")
def get_authenticated_service(args):
flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE,
scope=YOUTUBE_UPLOAD_SCOPE,
message=MISSING_CLIENT_SECRETS_MESSAGE)
storage = Storage("%s-oauth2.json" % sys.argv[0])
credentials = storage.get()
if credentials is None or credentials.invalid:
credentials = run_flow(flow, storage, args)
return build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
http=credentials.authorize(httplib2.Http()))
def initialize_upload(youtube, options):
tags = None
if options.keywords:
tags = options.keywords.split(",")
body=dict(
snippet=dict(
title=options.title,
description=options.description,
tags=tags,
categoryId=options.category
),
status=dict(
privacyStatus=options.privacyStatus
)
)
# Викликаємо метод videos.insert API для створення та завантаження відео.
insert_request = youtube.videos().insert(
part=",".join(body.keys()),
body=body,
media_body=MediaFileUpload(options.file, chunksize=-1, resumable=True)
)
resumable_upload(insert_request)
# Цей метод реалізує стратегію експоненціального відновлення для продовження
# неуспішного завантаження.
def resumable_upload(insert_request):
response = None
error = None
retry = 0
while response is None:
try:
print ("Завантаження файлу...")
status, response = insert_request.next_chunk()
if response is not None:
if 'id' in response:
print ("Відео з id '%s' успішно завантажено." % response['id'])
else:
exit("Завантаження не вдалося через несподівану відповідь: %s" % response)
except HttpError as e:
if e.resp.status in RETRIABLE_STATUS_CODES:
error = "Виникла повторна HTTP помилка %d:\n%s" % (e.resp.status,
e.content)
else:
raise
except RETRIABLE_EXCEPTIONS as e:
error = "Сталася повторна помилка: %s" % e
if error is not None:
print (error)
retry += 1
if retry > MAX_RETRIES:
exit("Більше не намагаємося повторити.")
max_sleep = 2 ** retry
sleep_seconds = random.random() * max_sleep
print ("Чекаємо %f секунд і потім намагаємося знову..." % sleep_seconds)
time.sleep(sleep_seconds)
if __name__ == '__main__':
argparser.add_argument("--file", required=True, help="Файл відео для завантаження")
argparser.add_argument("--title", help="Заголовок відео", default="Тестовий заголовок")
argparser.add_argument("--description", help="Опис відео",
default="Тестовий опис")
argparser.add_argument("--category", default="22",
help="Числовий код категорії відео.")
" +
"Дивіться https://developers.google.com/youtube/v3/docs/videoCategories/list")
argparser.add_argument("--keywords", help="Ключові слова відео, через кому",
default="")
argparser.add_argument("--privacyStatus", choices=VALID_PRIVACY_STATUSES,
default=VALID_PRIVACY_STATUSES[0], help="Статус конфіденційності відео.")
args = argparser.parse_args()
if not os.path.exists(args.file):
exit("Будь ласка, вкажіть дійсний файл за допомогою параметра --file=.")
youtube = get_authenticated_service(args)
try:
initialize_upload(youtube, args)
except HttpError as e:
print ("Виникла HTTP помилка %d:\n%s" % (e.resp.status, e.content))
Завантажте відео за допомогою наступної команди
python app.py --file="video1.mp4" --title="Літній відпочинок у Каліфорнії" --description="Чудово провели час, серфінгуючи в Санта-Круз" --keywords="серфінг,Санта-Круз" --category="22" --privacyStatus="private"
Дозвольте додатку доступ, коли він попросить про це.
Перекладено з: How to upload videos to YouTube in Python?