YouTubeのショート動画を投稿しているが、画面から動画を選択してアップロードする事が大変に感じた。そこで今回はローカルにある動画ファイルをYouTubeのショート動画として自動でアップロードする事にした。
import google_auth_oauthlib.flow
import googleapiclient.discovery
from googleapiclient.http import MediaFileUpload
title = ""
description = ""
publish_at = "2024-12-14T06:30+09:00"
movie_file_path = "example.mp4"
category_id = "20" # game
api_service_name = "youtube"
api_version = "v3"
client_secrets_file = "./credential.json"
scopes = ["https://www.googleapis.com/auth/youtube.upload"]
flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
client_secrets_file, scopes)
credentials = flow.run_local_server(port=0)
youtube = googleapiclient.discovery.build(
api_service_name, api_version,
credentials=credentials)
media_body = MediaFileUpload(movie_file_path)
request = youtube.videos().insert(
part="snippet,status",
body={
"snippet": {
"categoryId": category_id,
"description": description,
"title": title,
},
"status": {
"selfDeclaredMadeForKids": False,
"privacyStatus": "private",
"publishAt": publishe_at,
}
},
media_body=media_body,
)
print(request)
response = request.execute()
print(response)
実装したスクリプトを実行する。
以下のパッケージをpipでインストールしておく。
google_auth_oauthlib
google-api-python-client
これらは requirements.txt
に記述されているものとする。
pip install -r requirements.txt
Google Cloud Consoleにアクセスし、https://console.cloud.google.com/apis/api/youtube.googleapis.com/credentials?hl=jaからYouTube Data API v3を有効化する。
認証には、OAuth 2.0を使用する。https://console.cloud.google.com/apis/credentials?hl=jaにアクセスし、OAuth クライアント IDを作成、認証情報のJSONファイルをダウンロードする。
このダウンロードしたJSONファイルは、今回は便宜上 credential.json
という名前でカレントディレクトリに保存した。このファイルは機密情報であるため、取扱に注意する必要がある。
依存パッケージのインストール、APIの有効化、認証情報の取得ができたら、スクリプトを実行する。
python3 main.py
初回実行時にはWebブラウザが開き、認証と認可が求められる。それらを実施するとスクリプトが進み、動画がアップロードされる。
APIの使用には制限があり、APIコールの制限を超えないように注意する必要がある。
YouTube Data API v3を使って、自動で予約投稿動画をアップロードできるようにした。APIの利用には利用回数に制限があるため、要件に応じて確認すると良い。今後、このスクリプトをEmacsのDiredから実行できるように拡張したい。
公式ドキュメント
パッケージ、ソースコード、標準など
ブログ