【Tips】初心者でもできる『GoogleAppsScript』でYoutube再生リストをスプレッドシートに転記し学習管理する方法

コンサルタントの道具箱

目的

YouTube の 「再生リスト」 の中にある
動画のタイトル・URL・公開日等を 自動でスプレッドシートに一覧化 します。
これにより自分がどこまで視聴したか(学習したのか)わからなくなるのを防ぎます。

今回のOutput

サイバーセキュリティ分野の国家資格である情報処理安全確保支援士の学習動画を配信している方のYoutube動画の再生リストに含まれるURLを、スプレッドシートに一括転記します。転記するためにはスプレッドシートから拡張機能のAppScriptを利用します。


↑一覧化しみたものはステータスを変更することで管理がしやすいです。
スプレッドシートで視聴日を記入すれば視聴回数の管理も可能です。

方法

事前準備(1回だけやればOK)

  1. Googleスプレッドシートを新規作成
  2. メニューから
    [拡張機能] → [Apps Script] を開く
  3. エディタが開いたら、ファイル内容を全部消して、後で貼るコードをコピペ
  4. 左側メニューの
    [サービス]→ [+] をクリック
    • 「YouTube Data API v3」を探して 追加
    • これで YouTube 高度なサービスが使えるようになります

※初回実行時は「このプロジェクトを承認しますか?」的な確認が出るので、
指示に従って許可してください。

イメージ図

コードは以下を貼り付けてください

function fetchPlaylistVideos() {
  // ★ここに対象の再生リストIDを入れる
  const PLAYLIST_ID = 'PLfrpqyRFsglL3WgvYiZsBO7Al1YsE64DI';

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.clearContents();

  // ヘッダー行
  const header = [
    'No',
    'ステータス',
    '優先度',
    '動画タイトル',
    'URL',
    '再生リストID',
    '動画ID',
    '公開日',
    'メモ',
    '次のアクション'
  ];
  sheet.appendRow(header);

  let pageToken = null;
  let index = 1;

  do {
    // 再生リスト内の動画一覧を取得
    const response = YouTube.PlaylistItems.list('snippet,contentDetails', {
      playlistId: PLAYLIST_ID,
      maxResults: 50,
      pageToken: pageToken
    });

    const items = response.items;
    if (!items || items.length === 0) break;

    items.forEach(item => {
      const snippet = item.snippet;
      const contentDetails = item.contentDetails;

      const videoId = contentDetails.videoId;
      const title = snippet.title;
      const publishedAt = contentDetails.videoPublishedAt; // ISO形式
      const videoUrl = 'https://www.youtube.com/watch?v=' + videoId;

      const row = [
        index,
        '未着手',            // 初期値:あとで手動更新
        '中',                // 初期値:あとで手動更新
        title,
        videoUrl,
        PLAYLIST_ID,
        videoId,
        publishedAt,
        '',                  // メモ(空欄)
        ''                   // 次のアクション(空欄)
      ];
      sheet.appendRow(row);
      index++;
    });

    pageToken = response.nextPageToken;
  } while (pageToken);
}

上記コード全体の構造の説明

function fetchPlaylistVideos() {
  const PLAYLIST_ID = 'PLfrpqyRFsglL3WgvYiZsBO7Al1YsE64DI'; // ①
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // ②
  sheet.clearContents(); // ③
  const header = [...]; // ④
  sheet.appendRow(header); // ⑤

  let pageToken = null; // ⑥
  let index = 1;

  do { // ⑦
    const response = YouTube.PlaylistItems.list('snippet,contentDetails', {
      playlistId: PLAYLIST_ID,
      maxResults: 50,
      pageToken: pageToken
    });

    const items = response.items;
    if (!items || items.length === 0) break;

    items.forEach(item => { // ⑧
      const snippet = item.snippet;
      const contentDetails = item.contentDetails;

      const videoId = contentDetails.videoId;
      const title = snippet.title;
      const publishedAt = contentDetails.videoPublishedAt;
      const videoUrl = 'https://www.youtube.com/watch?v=' + videoId;

      const row = [index, '未着手', '中', title, videoUrl, PLAYLIST_ID, videoId, publishedAt, '', ''];
      sheet.appendRow(row);
      index++;
    });

    pageToken = response.nextPageToken; // ⑨
  } while (pageToken);
}

🪄 各パートの解説

PLAYLIST_ID

YouTube の URL に含まれる「再生リストID」を指定します。
例:
https://www.youtube.com/watch?v=xxxxx&list=PLaaaa
この「PLaaaa」の部分が再生リストIDです。


② スプレッドシートの操作

SpreadsheetApp.getActiveSpreadsheet()
= 今開いてるスプレッドシート全体。
.getActiveSheet()
= その中の「現在アクティブなシート」。

つまり「今開いてるシートに出力するで!」という意味です。


sheet.clearContents()

シートを最初に一度 空っぽにリセット します。
(見やすくするための初期化)


④ ヘッダー定義

列のタイトルを設定してます。
例:「No」「動画タイトル」「URL」「メモ」など。
この部分は自分で列を増減させてもOK。


sheet.appendRow(header)

ヘッダー行をシートに1行目として書き込みます。


⑥ ページトークン(pageToken

YouTube APIは1回で最大50件しか返せません。
再生リストが長い場合は ページをめくりながら全部取得 する必要があります。
そのために使うのが pageToken


YouTube.PlaylistItems.list(...)

Googleが提供している YouTube Data API を呼び出して、
指定した再生リスト内の動画情報を取得しています。

'snippet,contentDetails' という指定で、

  • snippet → タイトルや説明文など
  • contentDetails → 動画ID、公開日など

をまとめて取ってます。


⑧ 各動画を1行ずつ処理 (forEach)

1件ずつタイトル・URLなどを取り出して
sheet.appendRow() でスプレッドシートに追加していく処理です。

videoUrl の生成で

'https://www.youtube.com/watch?v=' + videoId

とやってるのがポイント。
この1行で、クリックできるURLができあがります。


response.nextPageToken

もし再生リストが50件を超える場合、
次のページのトークンが返ってくるので
do...while(pageToken) のループで続きも全部取る仕組みです。


💡 補足

  • 「YouTube Data API」を有効化してるから動いてます(拡張サービス)
  • APIの上限(1日1万リクエスト)は普通の利用では全く問題なし
  • sheet.clearContents() を消せば追記式にもできます(更新履歴残したい場合)

🌱 応用のヒント

  • チャンネル全体の動画一覧 も取れる
  • 投稿日で自動ソート
  • 条件付き書式で「未着手=灰色」「完了=緑」みたいに視覚管理
  • 別シートに「メモ」をリンクすることも可能

この方法でYoutubeの再生リストの管理が楽になりますね〜
ぜひお試しください。

関連書籍

今回の事例が載っているわけではないですが、仕組みなどの理解に役立ちます。
生成AIでコード抽出や確認が楽になる時代になりました。

参考情報

Apps Script  |  Google for Developers
高品質なクラウドベースのソリューションを簡単に開発できます。

Google Apps Script 入門 神戸大学

コメント

タイトルとURLをコピーしました