見出し画像

令和最新版RSSのJSON Feedを作ってインターネット老人は生き永らえる


ポエム (前書き)

令和のこの時代、インターネット上での情報収集はTwitter (X), Instagram等のSNSが主である人は多いだろう。
もちろん自分も使っているが、公式アカウント系だとこの店舗の情報はInstagramのみ発信・このブランドの情報はFacebookのみ発信とまちまちなので管理が煩雑だったり、そもそもSNSで情報発信を行っていないところもある。Twitterに統一したい。と思いつつも前者は慣れてしまったので置いておくとして、問題は後者だ。
Webサイトで情報を発信していたとしても、こちらから定期的に見に行くのは非常に面倒くさい。そっちからきてほしい。TwitterのTLのように。

インターネット老人の皆様にはもうおわかりであろう。

そう、RSSリーダーの出番である。

しかしまたこの事実も皆様ご存知のように、SNSの隆盛などによりRSS(Atom)というフォーマットやそれを読み込むフィードリーダーは衰退の一途を辿っている。
2013年のGoogleリーダーの提供終了を皮切りに、様々なアプリケーションが開発を終了し、Webサービスが閉鎖され、拡張機能・ブラウザのサポートが打ち切られていく。
ただし完全に終わった訳ではなく、後続のサービスやアプリが現在も密やかに生き残っており、RSSフィードを提供しているサイトも思ったより存在している。
私もGoogleリーダー→FeedlyFeed Wrangler (2023/3に閉鎖)→Feedbinと乗り換えながらReeder経由で今も利用中である。
Reederはいいぞ。

事の発端

テントを背負ってという好きなTV番組があるのだが、不定期放送の上に放送告知をしてくれるSNSアカウントがなく、公式サイトや番組表サイトにいつの間にか記載されているのを察知するしかなかった。
当時はTwitterのAPIが個人レベルでも自由に使えたので

  1. (利用規約等をよく読んでから)Webサイトをスクレイピングして

  2. 放映予定を検知したら非公開Twitterアカウントに自動投稿して

  3. Twitterアプリのプッシュ通知を受け取る

という仕組みを作って放映の通知を自動化していた。
そんな中Twitter APIの有料化・機能制限の話が出てきて、きな臭くなってきたのでTwitter APIを使わない運用にするべく動き出した。

先述の仕組みでデータベース代わりにTextDBを使っており、TextDBはJSONでレスポンスを返してくれるので、JSONに対応したRSSリーダーがあるとデータをほぼ流用できるんだけどないかな〜ないよな〜と検索したところ、この記事を見つけた。あるんかい。

JSON大好きっ子なのでこの流れには乗らなければならない。
XML滅びるべし (これまでの記憶を振り返りつつ)

本題

というわけで前置きが長くなったが、要は
SNSから情報を得られないならWebページをスクレイピングして自分でJSONフィードを作成してリーダーに登録して解決しよう
という話をまとめた記事です。
大した内容ではないためコードは記載しませんので何卒ご了承ください 🙏

必要なもの

  • お好きなプログラミング言語

    • 自分はRuby + Mechanizeで実装

  • データを保存する何か (今回はTextDB)

  • CIツール

    • バッチ処理ツールとして

    • 自分はCircleCIを利用

  • JSONフィードに対応したフィードリーダー

実装手順

TextDBにアクセスするとtokenが発行されるので保管する。
TextDBのAPIはシンプルに読込・保存 (上書き)のみで、使い方もページを読むとすぐわかるはずです。
データの読込・保存処理を実装したら、次は欲しい情報を取得する処理を書く。

今回のケースだと、番組表サイトに1日1回1ページだけスクレイピングを行ってデータを取得する。
JSON Feedのフォーマットはこちらを参考に構築。
その後は

  1. JSONファイルからデータを読込

  2. スクレイピングでデータを取得

  3. 1で読み込んだデータに2のデータを追加

    • 同じデータを保存しないように処理

      • 区別用のID的なものを見つけて保存するなど

  4. JSONファイルに保存

こんな感じで実装を行う。

A simple way to share small amounts of data

https://textdb.dev/

とTextDBのページに書いてあるので大量にデータを保存しないようにする。
Feedbinは1フィード直近400件まで保存と書いてあるので、TextDBに保存する時も直近400件まで保存して古いものから消すように実装した。

これだけのためにサーバを用意して定期処理の設定をして…とコストを掛けるのも手間で、最終的にCIを回すだけで完結する運用にする。
その運用だと考慮が必要なのがデータベースで、今回はTextDBを利用したけど、CI外でデータを保存できてJSONのレスポンスを返す固定のURLが用意できれば手段はなんでもよい。
例えばS3などのクラウドストレージにJSONファイルを保存するなどでも。

実装が終わったらCIを設定する。
CircleCIの場合、スケジュール実行機能を使って定期的に処理を行うように設定。
ここまで出来たらJSONフィードの用意は完了。
あとは使っているRSSリーダーにTextDBのURLを登録したら終わり。

君だけの最強JSON Feedを作り出そう!

この記事が気に入ったらサポートをしてみませんか?