🦆

Youtubeのチャンネル更新をRSSFeedで取得する

に公開

なぜ作成したのか

  • よく見るYoutubeのチャンネルの更新を検知したい
  • チャンネル登録してればいいのかもだけど、毎朝の情報チェックの流れでまとめて記録しておきたい
  • となるとRSSFeedで取得できるのが良いのでは

やりたいこと

  • 指定のチャンネルの更新をRSSFeedで定期的に取得し、蓄積する
    • FeedUrlが取得できれば、現在運用している仕組みに組み込めるので、カテゴリ分類、タグ付けが共通化できる

調査

ChatGPTで調べた結果、公式に仕組みが提供されているらしい

1. 基本形:YouTube公式のRSSフィードURL

C: YouTubeはチャンネル・ユーザー・再生リストごとに、実は今もRSSを出しています:

  • チャンネルID指定
https://www.youtube.com/feeds/videos.xml?channel_id=【チャンネルID】
  • ユーザー名指定(古い /user/ 型チャンネル)
https://www.youtube.com/feeds/videos.xml?user=【ユーザー名】
  • 再生リスト単位
https://www.youtube.com/feeds/videos.xml?playlist_id=【プレイリストID】

実運用では、ほぼ channel_id 版 を使うのが安定です。(Hacker News)


2. チャンネルID(UC…)を取得する方法

A. 一番汎用的なやり方(ページソースから探す)

  1. 対象チャンネルのページを開く
    例: https://www.youtube.com/@SomeChannel
  2. ブラウザで右クリック → 「ページのソースを表示」/「View Page Source」
  3. 表示されたソースで RSS または feeds を検索(Ctrl+F)
  4. 次のような <link> 要素を探す:
<link rel="alternate" type="application/rss+xml" title="RSS"
      href="https://www.youtube.com/feeds/videos.xml?channel_id=UCcJCTa4PvbOQj50y_HJSxXw">
  1. href="..." のURLをそのままRSSリーダーに登録すればOK (Chuck Carroll)

実質「YouTubeが自分でRSS URLを教えてくれている」ので、それをコピーするだけです。


B. /channel/ 型URLなら、URLだけでOK

もしチャンネルURLがすでにこうなっている場合:

https://www.youtube.com/channel/UCXXXXXXX...

この UCXXXXXXX... 部分が channel_id なので、

https://www.youtube.com/feeds/videos.xml?channel_id=UCXXXXXXX...

に差し込めば完了です。(Hacker News)


C. /@handle (ハンドル)型チャンネルの場合

最近多い https://www.youtube.com/@channelname 形式は、そのままでは使えません。

この場合は、

  1. https://www.youtube.com/@channelname にアクセス
  2. 上記 Aのソース表示→RSSリンクを検索channel_id 付きリンクを取得
    または
  3. /about ページ(例: https://www.youtube.com/@channelname/about)のソースで
    itemprop="identifier" を探すと channel_id が出てきます。(Erika Rowland)

3. Playlist単位でRSSを取りたい場合

チャンネル全体ではなく、特定の再生リストだけ追いたい場合:

  1. 再生リストページにアクセス
    例: https://www.youtube.com/playlist?list=PLxxxxxxxxxxx
  2. URLの list= の値が playlist_id
  3. 次のURLに差し替え:
https://www.youtube.com/feeds/videos.xml?playlist_id=PLxxxxxxxxxxx

(大阪北区のホームページ制作会社インターコード)


4. APIを使った取得(障害・仕様変更対策)

YouTube公式RSSは、過去に一時的に 404 になる事象が何度かあり、将来仕様変更される可能性もあります。(大阪北区のホームページ制作会社インターコード)

安定性を上げたい場合は、YouTube Data API v3でチャンネルの最新動画を定期取得し、自前でRSS相当のデータを作る、という構成もあります:

https://www.googleapis.com/youtube/v3/search
  ?part=snippet
  &channelId=【チャンネルID】
  &maxResults=5
  &order=date
  &type=video
  &key=【APIキー】

取得したJSONをGASなどで加工して、Spreadsheetに書き込んだり、別途RSSを生成する、というパターンです。(大阪北区のホームページ制作会社インターコード)

実験

まとめ

  • Youtubeチャンネルの更新はRSSFeedで取得できた
  • 動画の情報も既存のRSS情報収集の一環としてカタログ化・タグ付けできるので非常に助かる
GitHubで編集を提案

Discussion