最近色々なサービスの更新情報を一括で閲覧したいという欲求が高まってきたので、RSSリーダーをTinyTinyRSSへ移行しようと試行錯誤している。
元々SaaSの無料版を使っていたので、TinyTinyRSSへの移行にあたってはサーバーの管理が必要になってしまうのだが。

  • フィード数制限や広告のために有料版を利用することを考えると自前でサーバー建てた方が安く済みそう
  • いざとなればプラグインを開発することで利用感をカスタマイズできる

といったメリットもあるので使いこなせるといいなあと思ってます。
今回その一環として登録しているYouTubeチャンネルの投稿通知をTinyTinyRSSから確認できるようにしたかったのだが、結構苦戦したのでそのメモ。

困ったこと

調べたところYouTubeのチャンネルのRSSフィードは https://www.youtube.com/feeds/videos.xml?channel_id=[チャンネルID] というフォーマットになるようなのだが、 YouTubeチャンネルのページからRSSフィードへのリンクをたどることができないしチャンネルIDもいちいちチャンネルページのソースを確認しないとわからないらしい。
登録しているチャンネルはいくつかあるので、面倒すぎる。

解決策

  1. Google Takeout というサービスから、YouTubeの登録チャンネルを指定してファイルをダウンロードする
  2. ダウンロードしたアーカイブファイルからから登録チャンネル一覧のCSVを取り出す。
  3. CSVを加工してOPMLファイルに変換する

加工スクリプト

加工用のスクリプトは以下の通り。
使い捨てで作ったのでCSVやXMLのエスケープには配慮していない点に注意。

#!/bin/bash

cat << EOF > output.opml
<?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0">
    <head>
        <title>Shogo subscriptions in feedly Cloud</title>
    </head>
    <body>
        <outline text="YouTube" title="YouTube">
EOF

# CSVは チャンネルID,チャンネルURL,チャンネルタイトル という列構成を持つヘッダー付きCSV
awk -F, 'NR > 1 {print "<outline type=\"rss\" text=\"" $3 "\" title=\"" $3 "\" xmlUrl=\"https://www.youtube.com/feeds/videos.xml?channel_id=" $1 "\" htmlUrl=\"" $2 "\"/>"}' /path/to/csv >> output.ompl

cat << EOF >> output.opml
        </outline>
    </body>
</opml>
EOF