[GASで自動化] YouTubeの人気動画をNotionに自動保存!〜最新トレンドリサーチがもっとラクに!
この記事で伝えたいこと
YouTubeのトレンド動画、毎回チェックするのが大変じゃないですか?そんな時に便利なのが自動化です!Google Apps Script(GAS)とNotion APIを活用すれば、特定のトピックに関連する人気動画を毎週自動で収集し、Notionに整理することができます。最新の動画を見逃さず、自分のデータベースに一元管理できる便利な仕組みを作りましょう!
こんなことができます
GASで自動化することで、以下のようなフローが完成します:
YouTubeで指定のトピックに関する動画を毎週自動で収集。
再生回数や公開日などの詳細情報を含めて、Notionデータベースに整理。
毎回手動で調べる手間が省け、リサーチが効率化。
やること
GASのセットアップ:YouTubeサービスを使って動画を検索する設定を行います。
Notion APIのセットアップ:Notionデータベースに動画情報を追加するためのAPI設定。
GASコードの実装:収集から保存までの自動化フローを構築。
トリガーの設定:毎週自動で実行されるようにします。
GASのセットアップ
GASプロジェクトで「Services」から「YouTube Data API v3」を追加してください。これによってGAS上でYouTubeサービスを利用できるようになります。
Notion APIのセットアップ
NotionのMy integrationsページで新しいインテグレーションを作成し、トークンを取得します。このトークンをGASで利用して、Notionにデータを保存します。また、Notionでデータベースを作成し、「Published Date」(公開日)「Title」(ビデオタイトル)「Channel」(チャンネル名)「Views」(視聴回数)「URL」のプロパティを設定します。
コードの実装
以下のコードをGASにコピペして、自動化フローを作成しましょう。
言わずもがなですが、このコードはChatGPTに書いてもらいました!
const TOPIC = "生成AI"; // Specify your topic
const MAX_RESULTS = 10; // Number of videos to fetch
const daysBefore = 7; //Only collect videos published before X days before today
const notionToken = 'YOUR_NOTION_TOKEN';
const databaseId = 'YOUR_NOTION_DATABASE_ID'
function main() {
const videos = fetchViralVideos();
if (videos.length > 0) {
videos.forEach(video => {
const properties = {
"Published Date": { "title" : [{ "text": { "content": video.publishedDate } }]},
"Title": { "rich_text": [{ "text": { "content": video.title } }] },
"Channel": { "rich_text": [{ "text": { "content": video.channel } }] },
"Views": { "number": video.views },
"URL": { "url": video.url }
};
createNotionPage(properties);
});
Logger.log("Videos successfully added to Notion.");
} else {
Logger.log("No videos found.");
}
}
function fetchViralVideos() {
const dateBefore = new Date();
dateBefore.setDate(dateBefore.getDate() - daysBefore);
const publishedAfter = dateBefore.toISOString();
// Use YouTube Advanced Service to search for videos published
const searchResults = YouTube.Search.list("snippet", {
q: TOPIC,
order: "viewCount",
type: "video",
publishedAfter: publishedAfter,
maxResults: MAX_RESULTS
});
// Map the video results into a simplified structure
const videos = searchResults.items.map(item => ({
title: item.snippet.title,
channel: item.snippet.channelTitle,
url: `https://www.youtube.com/watch?v=${item.id.videoId}`,
views: getVideoViews(item.id.videoId),
publishedDate: item.snippet.publishedAt
}));
return videos;
}
function getVideoViews(videoId) {
// Fetch video statistics using the YouTube Data API service
const videoResponse = YouTube.Videos.list("statistics", { id: videoId });
const viewCount = videoResponse.items[0]?.statistics.viewCount || 0;
return parseInt(viewCount, 10);
}
function createNotionPage(properties) {
const url = 'https://api.notion.com/v1/pages';
const payload = {
parent: { database_id: databaseId },
properties: properties
};
const options = {
method: 'post',
contentType: 'application/json',
headers: {
'Authorization': `Bearer ${notionToken}`,
'Notion-Version': '2022-06-28'
},
payload: JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
}
トリガーの設定
GASエディタ左側の「トリガー」メニューから、main関数が毎週自動実行されるよう設定しましょう。これで、自動的にYouTube動画が収集され、Notionに追加されるフローが完成です。
こんな感じ!
おまけ
YouTube動画の要約する方法は最近たくさん出てますが、どれも単一の動画を要約するのが前提なものが多いようです。
(ちなみに今見ようとしてる動画の要約を見てから実際みるか決めたい場合はこのクロム拡張が便利)
複数の動画をまとめて処理して欲しいっていうニーズもあると思い、良い方法がないか模索しました。
以下の二つの方法を検討しました。
1. Gemini APIに動画ファイルを渡して要約させる方法:
これはまずYouTube動画をローカルにダウンロードしてからAPIにアップロードする必要がありますが、複数の動画を処理した場合を想定するとデータ通信負荷が懸念されるので却下。
2. YouTube動画のキャプションファイルをYouTube CaptionAPIでダウンロードしてOpenAI/Gemini APIで要約する方法:
試してみて気づいたのはこのAPIは自分のアカウントがオーナーの動画のキャプションしか取れないということです。なので断念。
というわけで一番シンプルでクリーンな方法は
1. NotionデータベースのURLカラムからまとめてYouTubeのリンクをコピペ。
2. Geminiアプリにペーストして以下のようにプロンプトする。
おわりに
自動化することで、リサーチの負担が減り、最新情報を効率よく集められます。YouTubeとNotionの組み合わせで、データをシンプルに一元管理できる便利な仕組みをぜひお試しください!