私が歌川です

@utgwkk が書いている

壊れたRSSフィードを修復するWebアプリケーションを書いた

表題のものを書きました。

github.com

使い方

GET /rss というエンドポイントに、 url というクエリパラメータでRSSフィードのURLを指定してリクエストすることで、修復したRSSを返してくれます。

例: https://patchrss.dt.r.appspot.com/rss?url=https://adventar.org/calendars/6386.rss

モチベーション

2024/12/2 22:57 追記: 以下の不具合はAdventarの方で修正してもらえました。

アドベントカレンダーのRSSフィードをSlackで購読しようとしたところ、以下の不具合を踏みました。

github.com

Adventarのリポジトリのissueにコメントしたので、直してもらえる (あるいは自分で直しにいく?) のを祈りつつ、直るまでの間もRSSフィードを購読できるようにしよう、というのが直接のモチベーションです。あとはHonoへの入門も兼ねています。

実装

やっていることは非常にシンプルです。

  • 指定されたURLã‚’RSSフィードとしてパースする
  • W3C Feed Validation Service, for Atom and RSSでエラーが出ないようなRSSフィードになるように書き換える
    • link 要素の値がURLじゃないならURLにする
    • 不足しているXML名前空間の指定を足す
    • guid 要素の値がパーマリンクかどうかを埋める

あとは申し訳程度のいたずら対策として、patchrss自身に対して無限ループになるようなリクエストを送ろうとしたらエラーになるようにしてみています。

https://github.com/utgwkk/patchrss/blob/62ffe86664efccb168f42023019abb146e51e6de/src/index.ts#L38-L42

ホスティング

ホスティングはGoogle App Engineに任せています。AWS Lambda Function URLも検討したけど、Cache-Control レスポンスヘッダでキャッシュを効かせたいとか、用意するコンポーネントを最小にしたいとかを考えた結果、GAEに落ち着きました。自分でちょっと使うぐらいのWebアプリケーションなら無料枠の範囲に収まるだろうし、デフォルトでエッジキャッシュが使えるのが嬉しいですね。

おわりに

https://patchrss.dt.r.appspot.com/ でホストしていますが、予告なく停止する可能性があります。もし継続して使いたい場合は、自分でGoogle App Engineにデプロイするなどしてください。難しいことはしてないので、環境変数と実行環境さえ用意できればだいたいどこでも動くと思います。

それでは、2025年もよきRSSライフを!