今回は、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にはできない。あなたの手でやる必要がある。
- GASのエディタ画面の左側にある「サービス(Services)」の「+」ボタンを押す。
- リストの中から「YouTube Data API v3」を探す。
- 「追加」を押す。
これであなたの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);
}
}
コメント