ステップ 1: 全体構想
- 目的:
- YouTube 動画の URL を入力。
- GAS を使用して動画から字幕データを取得。
- AI(Dify)を利用して字幕データを要約。
- 前提条件:
- GAS で YouTube Data API を活用。
- YouTube 動画が字幕を提供していること(自動生成でも可)。
- Dify が AI モデル(ChatGPT など)をバックエンドに持つ。
ステップ 2: Google Apps Script (GAS) の実装
GAS を使用して、YouTube 動画から字幕を取得します。
1. Google Cloud Console 設定
- Google Cloud Console で新しいプロジェクトを作成。
- YouTube Data API v3 を有効化。
- API キーを生成。
2. GAS スクリプトの作成
以下のスクリプトを GAS プロジェクトに貼り付けます。
javascriptコードをコピーするfunction getYoutubeCaptions(videoUrl) {
const apiKey = "YOUR_YOUTUBE_API_KEY"; // ここに生成した API キーを入力
const videoId = extractVideoId(videoUrl);
const captionsUrl = `https://www.googleapis.com/youtube/v3/captions?videoId=${videoId}&key=${apiKey}`;
const options = {
method: "get",
};
const response = UrlFetchApp.fetch(captionsUrl, options);
const data = JSON.parse(response.getContentText());
if (!data.items || data.items.length === 0) {
return "字幕が見つかりません。";
}
const captionId = data.items[0].id; // 最初の字幕 ID を取得
const downloadUrl = `https://www.googleapis.com/youtube/v3/captions/${captionId}?tfmt=ttml&key=${apiKey}`;
const captionResponse = UrlFetchApp.fetch(downloadUrl, options);
return captionResponse.getContentText(); // 字幕データを返す
}
function extractVideoId(url) {
const regex = /(?:https?:\/\/)?(?:www\.)?youtube\.com\/watch\?v=([^&]+)/;
const match = url.match(regex);
return match && match ? match : null;
}
- 機能:
getYoutubeCaptions
: YouTube API を呼び出して字幕データを取得します。extractVideoId
: YouTube 動画の URL から Video ID を抽出します。
3. GAS の公開
- GAS プロジェクトをウェブアプリとして公開。
- 実行権限を設定(「全員が実行可能」に設定)。
ステップ 3: Dify で字幕データを要約
字幕データを Dify に送信し、要約を生成します。
どのアプリを選択するのがベストなのか、迷うところではあるがエージェントはストリーミング形式のみ対応しているため、要約内容をまとめて取得することができない。
1. Dify エージェントの設定
- プロンプトの設定:
- Dify のエージェントでプロンプトを次のように設定します。cssコードをコピーする
以下のテキストを要約してください: {字幕データ}
{字幕データ}
に GAS から取得した字幕を挿入します。
- Dify のエージェントでプロンプトを次のように設定します。cssコードをコピーする
- API URL を取得:
- Dify の API URL をコピーします(例:
https://your-dify-endpoint.com/api/v1/agent/completions
)。
- Dify の API URL をコピーします(例:
2. GAS から Dify API を呼び出す
GAS から Dify の API に字幕データを送信し、要約を取得します。
以下のコードを GAS に追加:
javascriptコードをコピーするfunction summarizeCaptions(captions) {
const apiUrl = "https://your-dify-endpoint.com/api/v1/agent/completions"; // Dify のエージェント API URL
const apiKey = "YOUR_DIFY_API_KEY"; // Dify の API キー
const payload = {
prompt: `以下のテキストを要約してください:\n${captions}`,
max_tokens: 500,
};
const options = {
method: "post",
contentType: "application/json",
headers: {
"Authorization": `Bearer ${apiKey}`,
},
payload: JSON.stringify(payload),
};
const response = UrlFetchApp.fetch(apiUrl, options);
const data = JSON.parse(response.getContentText());
return data.choices[0].text; // 要約結果を返す
}
3. メイン処理の統合
すべてを統合し、以下のようにします。
javascriptコードをコピーするfunction processYoutubeVideo(videoUrl) {
const captions = getYoutubeCaptions(videoUrl);
if (!captions || captions === "字幕が見つかりません。") {
return "字幕データが見つかりませんでした。";
}
const summary = summarizeCaptions(captions);
return summary;
}
processYoutubeVideo
関数に動画 URL を渡すと、要約が返されます。
ステップ 4: 動作確認
- GAS の実行:
processYoutubeVideo("https://www.youtube.com/watch?v=YOUR_VIDEO_ID")
を呼び出し。- 字幕データが取得され、要約が Dify から返されることを確認します。
- エラー処理:
- 字幕がない場合や API エラーに対処するための例外処理を追加します。
ステップ 5: 将来的な改善
- Dify エージェントのカスタマイズ:
- より詳細な要約や重要なポイント抽出を実現するため、プロンプトを調整。
- 字幕翻訳:
- 字幕を翻訳してから要約する機能を追加(Google Translation API を使用)。
- UI の構築:
- 結果を表示する Web インターフェースを構築(Google Sheets または Web アプリで)。