Agile育成ブログ
未来を変える喜びを
未分類

YouTube 動画要約作成

ステップ 1: 全体構想

  1. 目的:
    • YouTube 動画の URL を入力。
    • GAS を使用して動画から字幕データを取得。
    • AI(Dify)を利用して字幕データを要約。
  2. 前提条件:
    • GAS で YouTube Data API を活用。
    • YouTube 動画が字幕を提供していること(自動生成でも可)。
    • Dify が AI モデル(ChatGPT など)をバックエンドに持つ。

ステップ 2: Google Apps Script (GAS) の実装

GAS を使用して、YouTube 動画から字幕を取得します。

1. Google Cloud Console 設定

  1. Google Cloud Console で新しいプロジェクトを作成。
  2. YouTube Data API v3 を有効化。
  3. 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 の公開

  1. GAS プロジェクトをウェブアプリとして公開。
  2. 実行権限を設定(「全員が実行可能」に設定)。

ステップ 3: Dify で字幕データを要約

字幕データを Dify に送信し、要約を生成します。
どのアプリを選択するのがベストなのか、迷うところではあるがエージェントはストリーミング形式のみ対応しているため、要約内容をまとめて取得することができない。

1. Dify エージェントの設定

  1. プロンプトの設定:
    • Dify のエージェントでプロンプトを次のように設定します。cssコードをコピーする以下のテキストを要約してください: {字幕データ}
    • {字幕データ} に GAS から取得した字幕を挿入します。
  2. API URL を取得:
    • Dify の API URL をコピーします(例: https://your-dify-endpoint.com/api/v1/agent/completions)。

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: 動作確認

  1. GAS の実行:
    • processYoutubeVideo("https://www.youtube.com/watch?v=YOUR_VIDEO_ID") を呼び出し。
    • 字幕データが取得され、要約が Dify から返されることを確認します。
  2. エラー処理:
    • 字幕がない場合や API エラーに対処するための例外処理を追加します。

ステップ 5: 将来的な改善

  • Dify エージェントのカスタマイズ:
    • より詳細な要約や重要なポイント抽出を実現するため、プロンプトを調整。
  • 字幕翻訳:
    • 字幕を翻訳してから要約する機能を追加(Google Translation API を使用)。
  • UI の構築:
    • 結果を表示する Web インターフェースを構築(Google Sheets または Web アプリで)。