1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GASでYouTubeの動画を時間指定で限定公開・非公開にする

Last updated at Posted at 2025-01-20

本記事は2025/01/20現在の情報です。実行時は自己責任でお願いいたします。

前置き

YouTubeでは、動画をアップロードした後の公開・非公開・限定公開を切り替えできます。
スケジュールで公開することもできますが、限定公開・非公開をスケジュールで切り替えることは現時点ではできません。
スクリーンショット 2025-01-20 110431.png

そこで、限定公開・非公開をスケジュールで切り替えたい皆さんのため、GASで切り替える方法を開発しましたので共有いたします。
なかなか調べても出てこなかったので、Googleのドキュメンテーションを調べてやっとできました。
比較的需要がありそうなので、分かりやすくまとめました。
最後までご閲覧いただけますと幸いです。

GASについて

GAS(Google App Script)は、Googleのあらゆるサービスやアプリをスクリプトで操作できるサービスです。
GAS自体がスクリプト言語としても扱われますが、基本的な文法はJavaScriptと同様です。

公開・非公開を操作する方法

それでは公開・非公開を操作する方法を紹介します。
以下の環境を前提とします。

  • Gmailアカウント(~@gmail.com / Workspaceアカウント)を所持していること
  • そのGmailアカウントがYouTubeチャンネルを所持していること
  • 動画を投稿していること

1. GASにアクセスする

以下のサイトにアクセスします。

Googleアカウントのログインを求められたら、任意のアカウントでログインします。

2. GASの新しいプロジェクトを作成

ホーム画面が開いたら、GASの新しいプロジェクトを作成します。
左上のボタンを押して作成します。
スクリーンショット 2025-01-20 110657.png

3. プロジェクト名を変更

新しく作成するとコードの画面になります。
左上のプロジェクト名を変更できますので、分かりやすい名前にしましょう。
スクリーンショット 2025-01-20 111044.png

4. YouTube Data API v3を有効化にする

YouTube Data API v3(アプリを操作するツール)が使えるように設定します。
左のサービスの隣の「+」マークを押します。
スクリーンショット 2025-01-20 111432.png

サービスを追加から、「YouTubeData API v3」を選択し、バージョンをv3、IDを「YouTube」にします。
スクリーンショット 2025-01-20 111539.png

サービスに「YouTube」と表示されたら準備完了です。
image.png

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 と指定します

image.png

※ 複数作りたい場合は、最下部に上記と同じコードを複製し、関数名(「youtubeURLOpenTest」の部分)を被らないように設定してください

7. 保存する

コードができたら保存しましょう。
上部の保存ボタンを押すか、ショートカットキー Ctrl + S を押しましょう。
スクリーンショット 2025-01-20 114133.png

8. テスト実行する

設定した関数がしっかり実行できているか確認します。
まずは上部からテストする関数を選択します。
スクリーンショット 2025-01-20 114448.png

次に横の「実行」を押します。
スクリーンショット 2025-01-20 114553.png

最初の実行は承認が必要です。「権限を確認」を押してください。
image.png

ユーザーを選択します。
スクリーンショット 2025-01-20 114916.png

この画面が出ても問題はありません。詳細を押します。
スクリーンショット 2025-01-20 115012.png

詳細の下の「○○に移動」を押します。
スクリーンショット 2025-01-20 115056.png

この画面が出たら、「続行」ボタンを押します。
スクリーンショット 2025-01-20 115324.png

実行され、実行ログに「実行に成功しました」と表示されたら完了です。
スクリーンショット 2025-01-20 120434.png

YouTubeにも限定公開にされているのがわかります。
image.png

実行設定

組み立てたコードをもとに実行設定をしましょう。

トリガー設定

左のメニューから「トリガー」を選択します。
スクリーンショット 2025-01-20 114413.png

右下のトリガーを追加するボタンを押します。
image.png

以下のような設定にして、「保存」を押します。
スクリーンショット 2025-01-20 134346.png

このようにして、トリガーは設定することができました。
image.png

※ 必ずしもその時間に公開状態が変わることを保証できないため、設定時間より1分早めに設定することをおすすめします。

実行後の様子

実行後は以下のような画面になります。
「前回の実行」が無効になっていて、「エラー率」が0%になっていると、実行は成功しています。
image.png

仕組みについて

全体像

大まかな処理の流れは以下のような形です。
s.png

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構造体の詳細

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?