0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NotebookLM × YouTube再生リスト|URL一括抽出をGASで自動化してリサーチ効率を最大化する

0
Posted at

NotebookLM × YouTube再生リスト|URL一括抽出をGASで自動化してリサーチ効率を最大化する

この記事で解決すること

  • NotebookLMが直接対応していない「YouTube再生リストURL」からの全動画読み込みを可能にします。
  • YouTube Data APIの50件制限を自動で突破し、大量の動画(100本以上も可)を一括抽出します。
  • 削除済み・非公開動画を自動除外。有効なURLだけをNotebookLMに渡せます。

はじめに

AIリサーチツールとして強力な NotebookLM ですが、YouTube動画をソースにする際、以下の不便さを感じたことはありませんか?

  • 再生リストURLを貼っても、リスト内の全動画を読み込んでくれない
  • 動画が大量にある場合、1つずつURLをコピーするのが苦行
  • 削除済み動画が混ざっていると、追加時にエラーが出て止まってしまう

そこで、Google Apps Script(GAS)を使って、再生リストから「現在公開されている動画URL」だけをトピック別に自動抽出し、スプレッドシートで一括管理・活用するシステムを作成しました。

システム構成図

スプレッドシートを起点に、GASがYouTube APIを経由してデータを取得し、NotebookLMへ渡すためのURLリストを生成する流れです。

前提条件

本システムを利用するには、以下の準備が必要です。

  1. Googleアカウント: スプレッドシートとGASを使用します。
  2. YouTube Data API v3 の有効化(重要):

実装手順

1. スプレッドシートの準備

  1. 新規スプレッドシートを作成し、シート名を 設定 に変更します。
  2. 1行目に以下の見出しを入力します。
トピック名 再生リストURL 最終更新 件数
(例) AI最新動向 https://www.youtube.com/playlist?list=... (自動入力) (自動入力)

2. GASの実装

  1. [拡張機能] > [Apps Script] を開きます。

  2. 左側にあるサービスを選択します。
    image.png

  3. YouTube Data API v3を追加します。
    image.png

  4. 以下のコードを貼り付け、保存します。

/**
 * スプレッドシートを開いた時に、メニューバーに「★YouTube連携」メニューを追加
 */
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('★YouTube連携')
      .addItem('URLリストを一括更新する', 'extractAllPlaylists')
      .addToUi();
}

/**
 * 「設定」シートから全再生リストを読み込み、URLを各シートに書き出し
 */
function extractAllPlaylists() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const configSheet = ss.getSheetByName('設定');
  
  if (!configSheet) {
    SpreadsheetApp.getUi().alert('「設定」という名前のシートが見つかりません。');
    return;
  }

  const data = configSheet.getDataRange().getValues();

  for (let i = 1; i < data.length; i++) {
    const topicName = data[i][0];
    const playlistUrl = data[i][1];
    
    if (!topicName || !playlistUrl) continue;

    const playlistId = playlistUrl.includes('list=') 
                       ? playlistUrl.split('list=')[1].split('&')[0] 
                       : playlistUrl;

    try {
      const validUrls = fetchValidUrls(playlistId);
      
      let targetSheet = ss.getSheetByName(topicName);
      if (!targetSheet) {
        targetSheet = ss.insertSheet(topicName);
      }
      targetSheet.clear(); 
      
      if (validUrls.length > 0) {
        targetSheet.getRange(1, 1).setValue("NotebookLM用URL(この列をコピー)").setFontWeight('bold');
        const outputData = validUrls.map(url => [url]);
        targetSheet.getRange(2, 1, outputData.length, 1).setValues(outputData);
        
        configSheet.getRange(i + 1, 3).setValue(new Date());
        configSheet.getRange(i + 1, 4).setValue(validUrls.length + "");
      }
    } catch (e) {
      configSheet.getRange(i + 1, 3).setValue("エラー: " + e.message);
    }
  }
  SpreadsheetApp.getUi().alert('全てのリストの更新が完了しました!');
}

/**
 * YouTube APIを使用して有効な動画URLを全件取得
 */
function fetchValidUrls(playlistId) {
  let videoIds = [];
  let nextPageToken = '';

  while (nextPageToken !== undefined) {
    const res = YouTube.PlaylistItems.list('contentDetails', {
      playlistId: playlistId,
      maxResults: 50,
      pageToken: nextPageToken
    });
    if (!res.items || res.items.length === 0) break;
    res.items.forEach(item => videoIds.push(item.contentDetails.videoId));
    nextPageToken = res.nextPageToken;
  }

  let validUrls = [];
  for (let i = 0; i < videoIds.length; i += 50) {
    const chunk = videoIds.slice(i, i + 50);
    const vRes = YouTube.Videos.list('status', { id: chunk.join(',') });
    vRes.items.forEach(v => {
      const privacy = v.status.privacyStatus;
      if (privacy === 'public' || privacy === 'unlisted') {
        validUrls.push(`https://www.youtube.com/watch?v=${v.id}`);
      }
    });
  }
  return validUrls;
}

使い方

  1. スプレッドシートをリロードすると、メニューに 「★YouTube連携」 が表示されます。
  2. 「URLリストを一括更新する」を実行(初回は承認が必要)。
  3. トピック別シートに生成されたURLをコピーし、NotebookLMに貼り付ければ完了です!

おわりに

NotebookLMでのソース管理が劇的に楽になります。ぜひ活用してください!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?