Bot に RSS 購読を追加
また Bot をいじりたくなった
Section titled “また Bot をいじりたくなった”前に作った転送 Bot は、もともとプライベートメッセージの転送だけのつもりだった。そこに LLM 審査を追加し、ホワイトリスト・ブラックリストを追加し、異議申し立て機能を追加し、i18n を追加し……気づいたらもう 1500 行超えてた。で、また手が出てしまった。ちょうど使ってる RSS ツールがイマイチだったので、「ついでに RSS も入れちゃおうか」と。kfb よ、お前はいずれ機能てんこ盛りのスーパーボットになってしまうのか……。
要件はシンプル:友達のブログが更新されたり、特定のサイトに新着記事が出たりしたら、Telegram で通知が来ればいい。情報フィードリーダーみたいな大げさなものはいらないし、管理画面も不要。RSS リストを追加・削除・更新するためのコマンドがいくつかあれば十分。というわけで:
/rss_add # 追加/rss_list # 一覧/rss_remove # 削除/rss_refresh # 更新/rss_title # 名前変更
既存サービスを使う?
Section titled “既存サービスを使う?”もちろん既製の RSS Bot を使ってもいい。でも、チャット欄に Bot を何個も並べる「Bot 大王」にはなりたくない。この Bot にはもともと:
- Telegram へのメッセージ送信
- Gemini による要約
が備わっている。こうなると、「入れちゃえば?」ってなるよね(違う
謎 RSS 生成
Section titled “謎 RSS 生成”理想的な item はこんな感じ:
<item> <title>記事タイトル</title> <link>https://example.com/post</link> <guid>https://example.com/post</guid> <description>記事の概要</description> <pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate></item>しかし、各サイトが生成する RSS はバラバラ。content:encoded がなかったり(冬夜のブログとか)、guid がリンクだったり謎 ID だったり。
例えば自分の RSS はこう:
<item><title>test-2</title><link>https://kokosa.icu/zh-cn/blog/test-2/</link><guid isPermaLink="true">https://kokosa.icu/zh-cn/blog/test-2/</guid><description>これはテスト用の記事です</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate><content:encoded><p>省略114514文字……</p></content:encoded><category>Test</category></item>RSS に記事丸ごと入れるのってすごくダサいと思ってる……
処理方法は:
- 優先的に
guidを使う guidがなければlinkを使う- それもなければ
title + pubDateを使う content:encodedがあれば AI 要約に流す
過去記事を全送信、タイムラインを埋め尽くす快感()
Section titled “過去記事を全送信、タイムラインを埋め尽くす快感()”初めて RSS を追加するときに、過去記事を全部送信するわけにはいかない。これはソフトウェアじゃなくてメッセージ Bot だから。
ブログによっては RSS に数十件の記事が入っている。購読を追加しただけで通知が流れまくったら大迷惑だ。なので、初回購読時には一度だけフィードを取得し、既存の記事をすべて「既読」として記録する(送信はしない)。
その後の定期リフレッシュで新しい item を検出したときだけ通知を送る:
[RSS] Kokosa's Blog
Bot に RSS 購読を追加https://kokosa.icu/zh-cn/blog/2-tgbot-rss.md
Summary: 転送 Bot に RSS 購読通知を追加、定期リフレッシュ・重複排除・AI 要約に対応。Cloudflare Cron
Section titled “Cloudflare Cron”Worker は常駐サービスではないので、定期リフレッシュには wrangler.toml に cron を設定する:
[triggers]crons = ["*/30 * * * *"]30 分ごとにチェックする。テスト用に手動コマンドも用意した:
/rss_refreshただ、手動リフレッシュがちょうど Cron の実行と重なる可能性がある。そこで KV ロックが必要になる。さもないと、2 つのリフレッシュタスクが同時に「この記事はまだ未送信だ」と判断して、同じ通知が 2 回送られてしまう。

LLM 要約
Section titled “LLM 要約”せっかく Gemini を導入済みなのに、通知にリンクだけ載せるのはもったいない!というわけで、記事の要約もしてもらうことにした。
前に実装したコンテンツ審査のタイムアウトは 4 秒。審査は SAFE か UNSAFE を出力するだけだから問題なかったけど、要約は話が別だ(違う)。タイトルと本文を読み込んで、さらに要約文を生成するには 4 秒だと厳しい。そこで要約専用に 20 秒のタイムアウトを設定。失敗しても大した問題じゃない。せいぜい:
Summary: AI summary unavailable.で済む。リンクは変わらず送られるので。
- プライベートメッセージ転送
- スパムメッセージ審査
- RSS 購読通知
- 続く…
最初の構想(広告をブロックできるだけの数百行の転送 Bot)からは少し膨らんだけど、そこまで大きくはなっていない。
光速で Vibe コーディングを終えたあとで思ったこと:OpenClaw みたいなツールに任せてもよかったのでは?(kfb、立ち上がれ…いつかロブスターを超えるのだ…)
Bot 自体はまだひっそりしてるけど、自分が何か投稿するたびに Bot が教えてくれるようになった:「また水増し記事を書きましたね」(でも次はいつ書くんだろう…)