🤖

Zennの投稿を監視するSlackbotをCloudflare Workersで作った

2023/12/19に公開

この記事は Cloudflare Advent Calendar 2023の19日目の記事です

作ったもの

https://github.com/sugawani/slack-zenn-rss-tracker
Cloudflare Workers + slack-cloudlfare-workers で動いています


こんな感じで新しい Zenn ブログの投稿が Slack に通知されます

slack-cloudflare-workers とは?

https://zenn.dev/seratch/articles/c370cf8de7f9f5
作者様がこちらの記事に丁寧にまとめてくれています
シンプルかつわかりやすい作りで、今回のアプリも簡単に作れました

解説

フロー


ちょっと線が複雑ですがやっていることはシンプルで、以下を繰り返しているだけです

  1. 最新の記事一覧と保存済みのブログ一覧を比較
  2. 新しく投稿された記事を slack に通知
  3. 最新の記事一覧を保存

コード解説

RSS の取得とパース

https://zenn.dev/zenn/articles/zenn-feed-rss
RSS は Zenn が公開している API を使用しています

https://www.npmjs.com/package/fast-xml-parser
パースはこちらを使用しています
シンプルで早く Node.js 依存もないので Cloudflare Workers でも問題なく動作しました

fetch API のキャッシュ対策

await caches.default.delete(`https://zenn.dev/${userID}/feed`)
const res = await fetch(`https://zenn.dev/${userID}/feed`);

https://developers.cloudflare.com/workers/learning/how-the-cache-works/#interact-with-the-cloudflare-cache
fetch API が同一のリクエストをキャッシュしてしまうため、何とかキャッシュを消すために実装しました
また、fetch API の option は Cloudflare Workers 環境で使えないため、cache API で削除を試みています
消せているか少々怪しいため、お守り的な意味合いもあります

最後に

RSS フィードを購読するだけであれば Slack のアプリを使えば解決ですが、Publication 単位で購読できないため独自実装してみました
キャッシュ周りなど思わぬハマりどころもあり、あえて車輪の再発明をしてみるのも悪くないなと思いました

EGSTOCK,Inc.

Discussion