LoginSignup
1

posted at

updated at

Qiita ユーザーページの RSS に件数制限がついたので、API から RSS に変換する Cloudflare Workers を作った

タイトルの通りです。

私のポートフォリオでは、RSS を用いて Qiita や Zenn の記事を取得して一覧表示しているのですが、先日、古い記事が表示されていないことに気づきました。原因を探していくうちに、Qiita の Feed から直近 4 件しか取得できていないことに気づき、GitHub Discussions にて質問したところ、「RSSで取得できる件数は、4/6に4件にする仕様変更を行いました」とのお返事をいただきました。

RSSの機能はRSSリーダーなどで投稿された記事をリアルタイムで確認するための用途として公開しております。
一方、QiitaはAPIも公開しており、こちらはQiitaにあるデータを取得するための用途となっております。

この説明には納得できますし、「パフォーマンス改善の目的」らしいので、仕方ないのかなとも思います。

ただ、RSS は複数のサイトにまたがる投稿をまとめて取得・管理する際に非常に便利であり、また RSS 方式から API 方式への移行も 面倒 すぐにはできないため、Qiita API から全記事取得して RSS 形式で返してくれる Cloudflare Workers を作りました。

技術スタック

Hono

Cloudflare Workers に特化した、めちゃくちゃ速いルーティングライブラリです。

今回はあまりルーティング関係無いのですが、私が「Cloudflare Workers おもしろそう!」って思ったきっかけのライブラリでもあるのでヘビーユースしています。

aspida

API 通信に型を付けるラッパーライブラリです。

今回は /v2/items しか叩いていないのであまり目立った活躍はしていませんが、@aspida/fetch と組み合わせることで fetch の結果に一瞬で型が付きます。

Obj to XML

Cloudflare Workers は Node.js ではないので、Node.js に依存しないライブラリを使用する必要があるのですが、なかなかいいライブラリが見つからず、結局手書きしてしましました。

ただ、Cloudflare Workers で Node.js を~ みたいな記事はちょくちょく見かけるので、もしかしたら動かす方法があるのかもしれません。勉強不足を痛感します。

使ってね!

↑の記事のように、RSS を使って記事を集約するというのは思ったより多くの需要があるのかもしれません。
かくいう私も、この記事に影響を受けてポートフォリオに Qiita, Zenn への投稿記事を一覧表示していますし。

Cloudflare Workers 無料枠は 24 時間あたりのリクエスト数に上限があるため URL を貼ることはしませんが、MIT License で公開しているので、Fork などしてご自由にお使いください。
特に設定するようなこともなく簡単なので、RSS の件数制限で困っている人はぜひデプロイしてみてください。

また、Issue や Pull Request についても受け付けていますので、なにかありましたらどうぞ!

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
What you can do with signing up
1