実践編③:YouTubeを監視せよ!寝ている間に「推し」や「トレンド」を勝手にリストアップする諜報員Bot

今回は、YouTube Data APIを使って、特定のキーワード(例:「GAS 入門」「猫 動画」)に関する動画情報を自動でスプレッドシートにリストアップするツールを作ります。

「競合調査」や「トレンド把握」、あるいは単に「推しの動画を逃さないため」の活動を、寝ている間にAIにやらせましょう。

前回の「モーニングレポート」で、あなたは自分のスケジュールとタスクを支配下に置いた。

だが、外の世界はどうだ?

YouTubeには毎日何万もの動画がアップされている。その中には、あなたの仕事に役立つ「競合の情報」や、あなたの心を癒やす「猫の最新動画」が埋もれているかもしれない。

毎日YouTubeを開いて検索窓にキーワードを打ち込む?

そんな昭和の生活はもう終わりだ。

これからは、あなたが寝ている間にGASという名の諜報員(スパイ)がYouTubeの海を巡回し、有益な動画リストをスプレッドシートに並べておいてくれる。

今回は、Googleのサービス同士だからこそできる「YouTube Data API」を使った自動収集ツールを作る。

1. 【発端】検索するのが面倒くさい、でも流行りには乗りたい

あなたの脳内には、矛盾した二つの感情が渦巻いている。

「最近『AIツール』とか流行ってるらしいけど、情報多すぎて追いきれないわ……」

「毎日検索して、新しい順に並び替えて、再生数が多いやつだけチェックしたい」

「でもYouTube開くと、関係ない『おすすめ動画』の誘惑に負けて、気づいたら2時間経ってるんだよな……(自己嫌悪)」

そう、YouTubeの最大の敵は**「誘惑」だ。

情報収集のために開いたのに、気づけばショート動画を無限にスワイプしている。

この無駄な時間を削減するには、「YouTubeを開かずに、必要な動画リストだけを手に入れる」**しかない。

2. 【翻訳】YouTube検索を自動化するメモ

今回のターゲットは「YouTube」そのものだ。

GASには「YouTube Data API」という強力な裏口が用意されている。これを使えば、検索結果をデータとして引っこ抜ける。

【AIへの指示メモ(仕様書)】

  • 登場人物:

    • YouTube(情報の宝庫)
    • スプレッドシート(情報の保管庫)

  • 検索条件:

    • キーワード:「AI 活用」とか「GAS 入門」(シートのA1セルに書いておくことにしよう)
    • 期間:直近24時間以内(最新情報が知りたいから)
    • 順序:再生数順、または日付順

  • 取得したいデータ:

    • 動画のタイトル
    • 動画のURL
    • チャンネル名
    • 再生回数
    • 公開日

  • 出力:

    • スプレッドシートにズラッと書き出す
    • 毎回クリアしてから書き出すのではなく、下に追記していく(ログを残したい)

ここで重要なのは、「YouTube Data API」という単語をAIに伝えることだ。

これだけでAIは「ああ、Youtube.list を使えばいいんですね」と理解してくれる。

3. 【準備】サービスの追加(ここだけクリック作業)

コードを書く前に、GAS側で一つだけスイッチを入れる必要がある。

これだけはAIにはできない。あなたの手でやる必要がある。

  1. GASのエディタ画面の左側にある「サービス(Services)」の「+」ボタンを押す。
  2. リストの中から「YouTube Data API v3」を探す。
  3. 「追加」を押す。

これであなたのGASに「YouTubeを操る能力」がインストールされた。準備完了だ。

4. 【発注】AIへのプロンプト送信

さあ、諜報員に指令を出そう。

<実際に送信するプロンプト>

Plaintext

GASでYouTubeの動画情報を自動収集するツールを作りたいです。
「YouTube Data API v3」サービスは追加済みです。

# 要件
スプレッドシートの特定のセルに入力されたキーワードでYouTube検索を行い、結果をリストアップしてください。

# シート構成
・セルB1:検索したいキーワード(例:「猫」)
・データ出力開始行:4行目から

# 取得したい情報(列構成)
・A列:動画タイトル
・B列:動画URL
・C列:チャンネル名
・D列:公開日
・E列:再生回数(取得できれば)

# 検索条件
・指定したキーワードに関連する動画
・直近24時間以内に公開されたもの(公開日指定)
・動画(type='video')のみ

# 処理の流れ
1. B1セルのキーワードを読み取る
2. YouTube APIを使って検索を実行
3. 結果を4行目以降に追記していく(既存のデータを消さない)

初心者なので、コードに丁寧なコメントを入れてください。

5. 【実装】情報収集の自動化

AIが出力したコードを貼り付け、B1セルに好きなキーワード(例えば「ChatGPT」)を入力して実行してみよう。

初回はやはり「許可」を求められるが、堂々と許可しよう。

実行が完了したら、シートを見てほしい。

ズラリと並んだ動画のリスト。タイトル、URL、チャンネル名……。

あなたはYouTubeを開くことなく、今世界でアップされた最新の動画情報を手に入れたのだ。

あとは、気になったタイトルのURLをクリックするだけ。

無駄なサムネイルの誘惑に負けることもない。これが「賢者のYouTubeライフ」だ。

6. 【仕上げ】複数のキーワードを巡回させる

キーワードが一つだけでは物足りない?

そんな時は、B1セルだけでなく、B1, B2, B3…とリストにしておいて、ループ処理をさせればいい。

「GAS」「Python」「業務効率化」……

あなたの興味ある分野を全てリスト化し、トリガーで毎日深夜に実行させておく。

朝起きれば、あなた専用の「トレンド動画ニュース」が出来上がっているというわけだ。


(実践編③ 終了)


【実践編③ 付属資料】

1. AIが生成する標準コード(基本編)

セルB1に入力されたキーワードを使って、直近24時間の動画を検索・リストアップするコードです。

※事前にGASエディタの「サービス」から「YouTube Data API v3」を追加しておく必要があります。

JavaScript

function searchYouTubeVideos() {
  // --- 1. シートとキーワードの取得 ---
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var keyword = sheet.getRange("B1").getValue(); // B1セルのキーワードを読む
  
  if (!keyword) {
    Browser.msgBox("B1セルにキーワードを入力してください");
    return;
  }

  // --- 2. 検索条件の設定(直近24時間) ---
  var now = new Date();
  var oneDayAgo = new Date(now.getTime() - (24 * 60 * 60 * 1000));
  var publishedAfter = oneDayAgo.toISOString(); // ISO形式の日付文字列に変換

  // YouTube検索の実行 (最大50件取得)
  var results = YouTube.Search.list('id,snippet', {
    q: keyword,
    type: 'video',
    publishedAfter: publishedAfter,
    maxResults: 50,
    order: 'date' // 新しい順
  });

  // --- 3. データの抽出と出力 ---
  var videoList = [];
  
  // 検索結果をループ処理
  if (results.items) {
    for (var i = 0; i < results.items.length; i++) {
      var item = results.items[i];
      var videoId = item.id.videoId;
      
      var title = item.snippet.title;
      var channelTitle = item.snippet.channelTitle;
      var publishedAt = item.snippet.publishedAt;
      var videoUrl = 'https://www.youtube.com/watch?v=' + videoId;
      
      // 配列に格納 [タイトル, URL, チャンネル名, 公開日]
      videoList.push([title, videoUrl, channelTitle, publishedAt]);
    }
  }

  // シートに追記(データがある場合のみ)
  if (videoList.length > 0) {
    // 最終行を取得して、その下に書き込む
    var lastRow = sheet.getLastRow();
    // getRange(開始行, 開始列, 行数, 列数)
    sheet.getRange(lastRow + 1, 1, videoList.length, 4).setValues(videoList);
    
    // 完了メッセージ(トースト通知)
    SpreadsheetApp.getActiveSpreadsheet().toast(videoList.length + '件の動画を追加しました', '完了');
  } else {
    SpreadsheetApp.getActiveSpreadsheet().toast('条件に合う動画が見つかりませんでした', '残念');
  }
}

2. 拡張アイデアコード(応用編)

追加機能:詳細データ(再生数・いいね数)の取得 & サムネイル画像の表示

検索API (Youtube) だけでは「再生数」などの統計情報は取れません。

そこで、取得した動画IDを使って再度 YouTube.Videos APIを叩き、詳細情報を取得する「2段構え」のロジックを組み込みます。

さらに、シート上にサムネイル画像を表示する関数 =IMAGE() を埋め込みます。

JavaScript

function searchYouTubeVideosAdvanced() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var keyword = sheet.getRange("B1").getValue();
  if (!keyword) return;

  // 1. まず検索して動画IDのリストを作る
  var now = new Date();
  var oneDayAgo = new Date(now.getTime() - (24 * 60 * 60 * 1000));
  var publishedAfter = oneDayAgo.toISOString();

  var searchResults = YouTube.Search.list('id', {
    q: keyword,
    type: 'video',
    publishedAfter: publishedAfter,
    maxResults: 50,
    order: 'viewCount' // ★拡張:再生数が多い順にしてみる
  });

  var videoIds = [];
  if (searchResults.items) {
    for (var i = 0; i < searchResults.items.length; i++) {
      videoIds.push(searchResults.items[i].id.videoId);
    }
  }

  if (videoIds.length === 0) return;

  // 2. 動画IDを使って詳細情報(再生数など)を一括取得
  // APIの仕様上、カンマ区切りでIDを渡せる
  var videoDetails = YouTube.Videos.list('snippet,statistics', {
    id: videoIds.join(',')
  });

  var outputData = [];

  if (videoDetails.items) {
    for (var j = 0; j < videoDetails.items.length; j++) {
      var item = videoDetails.items[j];
      var snippet = item.snippet;
      var stats = item.statistics;

      var title = snippet.title;
      var url = 'https://www.youtube.com/watch?v=' + item.id;
      var channel = snippet.channelTitle;
      var viewCount = stats.viewCount;
      var likeCount = stats.likeCount;
      var thumbUrl = snippet.thumbnails.default.url;
      
      // ★拡張:IMAGE関数を使ってセルに画像を表示させる数式を入れる
      var imageFormula = '=IMAGE("' + thumbUrl + '")';

      outputData.push([imageFormula, title, url, channel, viewCount, likeCount]);
    }
  }

  // 3. 出力(ヘッダー:画像, タイトル, URL, チャンネル, 再生数, いいね数)
  if (outputData.length > 0) {
    var lastRow = sheet.getLastRow();
    sheet.getRange(lastRow + 1, 1, outputData.length, 6).setValues(outputData);
    
    // 行の高さを調整(画像が見えるように)
    sheet.setRowHeights(lastRow + 1, outputData.length, 90);
  }
}


part 6 of 11 【講座名】 AI-GAS[スプレッドシート自動化]

AI-GAS[スプレッドシート自動化]

【GAS初心者】作りたいものが思いつかない?「我慢」をやめれば自動化のネタは無限に湧いてくる

【AI×GAS】AIは「察してちゃん」が大嫌い!欲望を箇条書きにする「思考の翻訳」トレーニング

【GAS初心者】環境構築という「最初のボス」はもういない ——GASとスプレッドシートの蜜月関係

実践編①:「明日やろうは馬鹿野郎」を撲滅せよ —— 期限切れタスクを自分にチクリ報告する「Gmailリマインダー」

実践編②:Googleカレンダーも合体!寝起きの自分に「今日の絶望」を届ける最強モーニングレポート

実践編③:YouTubeを監視せよ!寝ている間に「推し」や「トレンド」を勝手にリストアップする諜報員Bot

実践編④:クリック地獄からの解放!スプレッドシートの「質問リスト」からGoogleフォームを全自動生成する

実践編⑤:24時間365日「即レス」する無敵の受付嬢!フォーム回答への自動返信&自分への通知システム

実践編⑥:画面が真っ赤になっても心停止しない!エラーメッセージはAIへの「ネタ振り」だと思え

実践編⑦:読むな、感じろ……いや、AIに読ませろ!Gemini APIで「長文アンケート」を3秒で要約&感情分析する

第8回(最終回):結論、プログラマーになる必要はない。「プロの指示出しおじさん/おばさん」になれ

コメント

この記事へのコメントはありません。

PAGE TOP