Як завантажити відео на YouTube за допомогою Python?

Кроки налаштування та Python код для завантаження відео на YouTube [Вибачте, кроки подані в дуже сирому вигляді через обмеження часу]

pic

https://developers.google.com/youtube/v3/getting-started

pic

developers.google.com

Виберіть Python

pic

Вибір Python

pip install --upgrade google-api-python-client  
pip install --upgrade google-auth-oauthlib google-auth-httplib2

Створіть проект Google Cloud

console.cloud.google.com

pic

pic

Створення проекту

pic

Вибір проекту

pic

Вибір APIs & Services

pic

Увімкнути

pic

Вибір YouTube Data API v3

pic

Вибір облікових даних

pic

Створення облікових даних

pic

Екран згоди

pic

Інформація про додаток

pic

Додати область доступу

pic

Пошук завантаження

pic

Додати користувачів

pic

Додати користувача

pic

Створення облікових даних

pic

OAuth Client ID

pic

Вибір Desktop

pic

Копіювання Client ID і Client Secret

Перейдіть за посиланням знову на https://developers.google.com/youtube/v3/getting-started

pic

Вибір “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

Копіюйте приклад коду

pic

developers.google.com

pip install oauth2client

Копіюйте приклад запиту з developers.google.com

pic

Файл 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?

Leave a Reply

Your email address will not be published. Required fields are marked *