1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

YouTubeのおすすめ動画に時間を溶かさないために、YouTube Data APIで学習動画をExcel管理する

1
Posted at

はじめに

勉強のために操作を覚えたいと思って特定のYouTubeチャンネルを開きたいはずなのに、今日のニュースなどおすすめ動画を見続けてしまった経験はありませんか?

私はよくあるので、「学習したい動画をExcelで管理し、そこから直接アクセスすれば余計な誘惑を減らせるのでは?」と考えました。

特定チャンネルの動画一覧を取得する方法を調べると、Google Apps Script(GAS)やスクレイピングなど様々な方法が見つかります。

しかし、私は普段あまりGASを利用しないことと、取得したデータをそのままExcelで管理したかったため、PowerShellとYouTube Data APIを利用する方法を選びました。
Windows環境であれば追加の開発環境を用意せず実行できることも、この方法を選んだ理由でもあります。
取得したCSVはExcelのPower Queryで読み込み、「未視聴」「視聴済み」を管理する運用をします。

本記事では、YouTube Data APIを利用して特定チャンネルの動画一覧(チャンネル名、タイトル、投稿日、URL)をCSVへ出力して管理する手法を紹介します。

想定する活用方法

取得したCSVをPower Queryで読み込み、以下のような管理を行います。

  • 視聴予定動画の一覧管理
  • 未視聴・視聴済みの管理
  • 学習コンテンツの蓄積
  • 興味のあるチャンネルの定期巡回

YouTubeを直接開く回数を減らすことで、おすすめ動画やショート動画への誘惑を防ぎ、集中しやすくなります。

準備

YouTube Data API の利用準備

YouTube Data API の設定は、@nbayashi(Naoya Nishibayashi)さんの以下の記事を参考に設定しました。

まずは YouTube Data API を利用するための API キーを取得します。

YouTube Data APIはGoogle Cloudから利用できます。

今回利用するAPIは消費クォータが少ないため、個人で動画一覧を取得する程度であれば通常は無料枠の範囲で利用できます。

APIキーの取得作業の内容(詳しくは@nbayashiさんの記事を見てもらえると迷いなく設定できると思います。)

  1. Google Cloud Consoleへアクセス
  2. YouTube Data API v3を有効化
  3. 認証情報を作成
  4. APIキーを取得

取得したAPIキーは後ほどPowerShellスクリプトで使用します。

注意

APIキーは第三者に公開しないよう注意してください。
GitHubやQiitaへサンプルコードを掲載する場合は、実際のAPIキーを記載しないようにしましょう。

PowerShellスクリプト

以下のスクリプトを実行すると、指定したYouTubeチャンネルの動画一覧を取得し、CSVへ出力できます。

今回勉強用に欲しい項目は以下の4項目です。

  • チャンネル名
  • タイトル
  • 投稿日
  • URL
$ApiKey = "取得したAPIキー"
$ChannelUrl = "https://www.youtube.com/@チャンネル名"
$OutputCsv = "保存先のCSVファイルパス"

$Handle = ($ChannelUrl -split '@')[1]

$ChannelInfo = Invoke-RestMethod `
    -Uri "https://www.googleapis.com/youtube/v3/channels?part=id,snippet&forHandle=$Handle&key=$ApiKey"

$ChannelId = $ChannelInfo.items[0].id
$ChannelTitle = $ChannelInfo.items[0].snippet.title

$ChannelData = Invoke-RestMethod `
    -Uri "https://www.googleapis.com/youtube/v3/channels?part=contentDetails&id=$ChannelId&key=$ApiKey"

$UploadsPlaylistId = $ChannelData.items[0].contentDetails.relatedPlaylists.uploads

$Videos = @()
$NextPageToken = $null

do {

    $PlaylistUrl = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=$UploadsPlaylistId&maxResults=50&key=$ApiKey"

    if ($NextPageToken) {
        $PlaylistUrl += "&pageToken=$NextPageToken"
    }

    $Response = Invoke-RestMethod -Uri $PlaylistUrl

    foreach ($Item in $Response.items) {

        if (-not $Item.snippet.resourceId.videoId) {
            continue
        }

        $Videos += [PSCustomObject]@{
            チャンネル名 = $ChannelTitle
            タイトル     = $Item.snippet.title
            投稿日       = ([datetime]$Item.snippet.publishedAt).ToString("yyyy/MM/dd HH:mm:ss")
            URL          = "https://www.youtube.com/watch?v=$($Item.snippet.resourceId.videoId)"
        }
    }

    $NextPageToken = $Response.nextPageToken

} while ($NextPageToken)

$Videos |
    Export-Csv `
        -Path $OutputCsv `
        -NoTypeInformation `
        -Encoding UTF8

PowerShellスクリプトのポイント

1. チャンネルURLからハンドル名を取得

以下の形式のURLからチャンネルハンドルを取得します。

https://www.youtube.com/@GoogleChrome

この場合、GoogleChrome がハンドル名となります。

2. チャンネルIDとチャンネル名を取得

YouTube Data APIの channels エンドポイントを利用して、チャンネルIDとチャンネル名を取得します。

取得したチャンネルIDは、後続のAPI呼び出しで使用します。

3. uploadsプレイリストを取得

YouTubeではチャンネルが投稿した動画を「uploadsプレイリスト」として管理しています。

そのため、まず uploadsプレイリストID を取得し、そのプレイリストから動画情報を取得します。

4. 動画一覧を取得

playlistItems APIを利用して投稿動画を取得します。

1回のリクエストで取得できる件数は最大50件です。

そのため、nextPageToken を利用してすべての動画を取得しています。

do {

    ...

} while ($NextPageToken)

5. CSVへ出力

ExcelのPower Queryで文字化けせず扱えるよう、UTF-8で出力しています。

$Videos |
    Export-Csv `
        -Path $OutputCsv `
        -NoTypeInformation `
        -Encoding UTF8

実行結果

CSVは以下のような形式で出力されます。

チャンネル名 タイトル 投稿日 URL
〇〇〇〇 サンプル動画1 2026/07/01 https://~
▽▽▽▽ サンプル動画2 2026/06/29 https://~

取得したCSVをExcelのPower Queryで読込みます。

Excel Power Queryでの管理

私はこのCSVをExcelのPower Queryで読み込み、動画管理表を作成しています。
Power Queryの操作方法はExcelのタブからデータ→データの取得→ファイルから→フォルダからを選択してCSVを保存したフォルダを選択します。
※今回はフォルダ内に複数のチャンネルのCSVが保存されていることを想定しています。

PowerQuery取込口.png

データの変換を選択します
PowerQueryデータ変換画面.png

フォルダ内のCSVの中身を見たいので、Contentsの右側にある↓↓のアイコンを選択して中身を見ます。
PowerQueryコンテンツの中身を見る.png

閉じて読み込むことでExcelのシートに反映されます。
PowerQuery閉じて読み込む.png

シートに読み込みますが、PowerBIと異なり、URLからハイパーリンクで飛ぶことができません
PowerQuery読込後.png

そこで、vbaでURLをハイパーリンクで埋め込む処理を行います。

Sub URL列をハイパーリンク化()

    Dim c As Range

    For Each c In Worksheets("シート名") _
        .ListObjects("テーブル名") _
        .ListColumns("列名") _
        .DataBodyRange

        c.Hyperlinks.Add Anchor:=c, Address:=c.Value

    Next c

End Sub

そうすることで、直接アドレスをクリックすることでリンク先に飛んで学習することが可能になります。

Power QueryでCSVを再読み込みすることで、新しく公開された動画も簡単に取り込めます。

視聴済みの動画のタイトルを別のデータテーブルを準備することで抽出した結果のテーブルとマージすることで未視聴のみの動画一覧にすることが可能となります。

おわりに

YouTubeには多くの有益な学習コンテンツがありますが、気軽にアクセスできる反面、学習以外の動画へ流れてしまうことも少なくありません。

今回紹介した方法では、YouTube Data APIを利用して学習対象の動画一覧をCSVとして管理できます。

PowerShellだけで実装できるため、Windows環境であればすぐに試すことができます。また、ExcelのPower Queryと組み合わせることで、自分専用の学習動画管理システムとして活用できます。

私は資格学習や技術系チャンネルの管理に利用していますが、ニュース、ガジェット、プログラミング、投資など、さまざまなジャンルにも応用できます。

少しでも「おすすめ動画に時間を溶かしてしまう」という方の参考になれば幸いです。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?