本記事は2025/01/20現在の情報です。実行時は自己責任でお願いいたします。
前置き
YouTubeでは、動画をアップロードした後の公開・非公開・限定公開を切り替えできます。
スケジュールで公開することもできますが、限定公開・非公開をスケジュールで切り替えることは現時点ではできません。
そこで、限定公開・非公開をスケジュールで切り替えたい皆さんのため、GASで切り替える方法を開発しましたので共有いたします。
なかなか調べても出てこなかったので、Googleのドキュメンテーションを調べてやっとできました。
比較的需要がありそうなので、分かりやすくまとめました。
最後までご閲覧いただけますと幸いです。
GASについて
GAS(Google App Script)は、Googleのあらゆるサービスやアプリをスクリプトで操作できるサービスです。
GAS自体がスクリプト言語としても扱われますが、基本的な文法はJavaScriptと同様です。
公開・非公開を操作する方法
それでは公開・非公開を操作する方法を紹介します。
以下の環境を前提とします。
- Gmailアカウント(~@gmail.com / Workspaceアカウント)を所持していること
- そのGmailアカウントがYouTubeチャンネルを所持していること
- 動画を投稿していること
1. GASにアクセスする
以下のサイトにアクセスします。
Googleアカウントのログインを求められたら、任意のアカウントでログインします。
2. GASの新しいプロジェクトを作成
ホーム画面が開いたら、GASの新しいプロジェクトを作成します。
左上のボタンを押して作成します。
3. プロジェクト名を変更
新しく作成するとコードの画面になります。
左上のプロジェクト名を変更できますので、分かりやすい名前にしましょう。
4. YouTube Data API v3を有効化にする
YouTube Data API v3(アプリを操作するツール)が使えるように設定します。
左のサービスの隣の「+」マークを押します。
サービスを追加から、「YouTubeData API v3」を選択し、バージョンをv3、IDを「YouTube」にします。
5. コードを書く
今回、サンプルコードを用意しましたので、まずはそのままコピー&ペーストしましょう。
// 指定された動画IDの公開・非公開を設定するコードです
function updateYouTubeStatus(youTubeId, inputPrivacyStatus) {
try {
// youTubeIdを用いて動画情報を取得します
let ym = YouTube.Videos.list(["status"], { "id": youTubeId });
// IDで取得できた動画の1個目を取得します
let yitem = ym.items[0];
// 公開情報を指定されたものに変更します
yitem.status.privacyStatus = inputPrivacyStatus;
// 変更を反映します
let yresult = YouTube.Videos.update(yitem, ["status"]);
// 実行状況ログを出力します
console.log('実行に成功しました。ログをご確認ください。');
console.log(yresult);
} catch (e) {
// エラーが発生した場合はログを出力します
console.error('公開・非公開設定が失敗しました。引数の入力内容に誤りがないかご確認ください。YouTubeの稼働状況により失敗する可能性があります。');
console.log(e);
}
}
// 呼び出し用の関数(後のトリガー設定に必要です)
function youtubeURLOpenTest() {
updateYouTubeStatus('XXXXXXXXXX', 'unlisted');
}
6. 呼び出し用関数の設定方法
呼び出し用関数は、後の実行設定に必要なコードです。
引数の1番目:YouTube動画URLの https://youtu.be/XXXXXXX
の XXXXXXX の部分)
引数の2番目:公開は public
、非公開は private
、限定公開は unlisted
と指定します
※ 複数作りたい場合は、最下部に上記と同じコードを複製し、関数名(「youtubeURLOpenTest」の部分)を被らないように設定してください
7. 保存する
コードができたら保存しましょう。
上部の保存ボタンを押すか、ショートカットキー Ctrl + S
を押しましょう。
8. テスト実行する
設定した関数がしっかり実行できているか確認します。
まずは上部からテストする関数を選択します。
最初の実行は承認が必要です。「権限を確認」を押してください。
実行され、実行ログに「実行に成功しました」と表示されたら完了です。
実行設定
組み立てたコードをもとに実行設定をしましょう。
トリガー設定
※ 必ずしもその時間に公開状態が変わることを保証できないため、設定時間より1分早めに設定することをおすすめします。
実行後の様子
実行後は以下のような画面になります。
「前回の実行」が無効になっていて、「エラー率」が0%になっていると、実行は成功しています。
仕組みについて
全体像
YouTube.Videos.list
動画情報を取得します。
YouTube.Videos.list([part, ...], { option })
YouTube.Videos.list
は、特定条件に則り、チャンネル内の動画の検索及びリストを返します。
このコードによる返却値は、成功の場合は以下の形式で返されます。
{
"kind": "youtube#videoListResponse",
"etag": etag,
"nextPageToken": string,
"prevPageToken": string,
"pageInfo": {
"totalResults": integer,
"resultsPerPage": integer
},
"items": [
video Resource
]
}
JSON形式で返される値から、item内の動画情報 Videos
を取得しています。
Videos
取得した動画情報オブジェクト Videos
は、動画に関する様々な情報を扱っています。
ここで紹介すると長いため、オブジェクトの詳細は以下のドキュメンテーションから参照してください。
このオブジェクトは取得したら書き換えが可能なため、内容を上書きしてから update
メソッドを実行します。
YouTube.Videos.update
動画情報を指定したオブジェクトで更新します。
YouTube.Videos.update(Videos, [part, ...])
ただし、書き換えできる情報には限りがありますので、詳しくは以下のページのリクエスト本文をご確認ください。
注意事項
- 実行するユーザー(スクリプトを所有するユーザー)は、動画をアップロードしたチャンネルの管理ユーザーと同じである必要があります。
- 動画をアップロードした本人以外がスクリプト上で公開・非公開を設定することはできません(APIの特性上)。
- もし作成するユーザーを誤った場合は、ユーザーを切り替えて再度作成して実行してください。
まとめ
今回はAPIで呼び出しできるスクリプトを紹介しました。
YouTube Data APIは、公開設定のほかにも、タイトル・説明文・翻訳文章等変えることができます。
開発者の皆さんは、ぜひYouTube Data APIの構造体に触れてみてはいかがでしょうか?
関連ページ
YouTube Data APIの概要
Videos構造体の詳細