表題のものを書きました。
使い方
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で購読しようとしたところ、以下の不具合を踏みました。
Adventarのリポジトリのissueにコメントしたので、直してもらえる (あるいは自分で直しにいく?) のを祈りつつ、直るまでの間もRSSフィードを購読できるようにしよう、というのが直接のモチベーションです。あとはHonoへの入門も兼ねています。
実装
やっていることは非常にシンプルです。
- 指定されたURLをRSSフィードとしてパースする
- W3C Feed Validation Service, for Atom and RSSでエラーが出ないようなRSSフィードになるように書き換える
link
要素の値がURLじゃないならURLにする- 不足しているXML名前空間の指定を足す
guid
要素の値がパーマリンクかどうかを埋める
あとは申し訳程度のいたずら対策として、patchrss自身に対して無限ループになるようなリクエストを送ろうとしたらエラーになるようにしてみています。
ホスティング
ホスティングはGoogle App Engineに任せています。AWS Lambda Function URLも検討したけど、Cache-Control
レスポンスヘッダでキャッシュを効かせたいとか、用意するコンポーネントを最小にしたいとかを考えた結果、GAEに落ち着きました。自分でちょっと使うぐらいのWebアプリケーションなら無料枠の範囲に収まるだろうし、デフォルトでエッジキャッシュが使えるのが嬉しいですね。
おわりに
https://patchrss.dt.r.appspot.com/ でホストしていますが、予告なく停止する可能性があります。もし継続して使いたい場合は、自分でGoogle App Engineにデプロイするなどしてください。難しいことはしてないので、環境変数と実行環境さえ用意できればだいたいどこでも動くと思います。
それでは、2025年もよきRSSライフを!