基于 Cloudflare Worker 的服务,自动抓取 RSS 订阅源更新并推送到 Telegram 频道。使用 KV 存储记录已发送文章,防止重复推送。
- 🔄 定时触发:支持 Cron 触发器(默认每小时检查一次)
- 📦 智能去重:使用 KV Storage 记录已发送的文章链接
- 🖼️ 智能配图:自动提取文章封面(支持 HeaderImage、Enclosure、Media:Content 或正文首图)
- 📝 格式优化:使用 HTML 模式解析,支持富文本
- 📸 图文消息:以“图片+标题+摘要”的形式发送,无图时自动降级为纯文本
- Cloudflare 账号
- Telegram Bot Token
- Telegram Channel ID(支持频道 @channelname 或群组 ID)
-
克隆项目
git clone https://github.com/calpa/rss-to-telegram.git cd rss-to-telegram -
安装依赖
yarn install
-
配置 Wrangler 复制并修改
wrangler.jsonc,确保 KV Namespace ID 配置正确。 -
设置密钥 为了安全,Cloudflare Worker 的敏感信息通过 GitHub Secrets 管理。
CLOUDFLARE_API_TOKEN: Cloudflare API Token,用于 GitHub Actions 部署。- 获取方法: 登录 Cloudflare Dashboard -> 点击右上角用户图标 -> "我的个人资料 (My Profile)" -> "API 令牌 (API Tokens)" -> "创建令牌 (Create Token)"。选择 "编辑 Cloudflare Workers (Edit Cloudflare Workers)" 模板或自定义令牌(需授予 Workers Scripts 的编辑权限)。请务必保存好此令牌,它只显示一次!
TELEGRAM_CHANNEL_ID**: 您的 Cloudflare 账户 ID。- 获取方法: 登录 Cloudflare Dashboard -> 选择您的账户 -> 在右侧边栏或概览页找到 “账户 ID (Account ID)”。
RSS_FEED_URL:RSS 订阅源地址TELEGRAM_BOT_TOKEN:Telegram 机器人 TokenTELEGRAM_CHANNEL_ID:目标频道或群组 ID(例如@HUSTMatNoble或-100xxxxxxxxxx)
如何将这些 Secret 添加到 GitHub 仓库: 在您的 GitHub 仓库页面,前往 "Settings" -> "Secrets and variables" -> "Actions",然后点击 "New repository secret" 添加这些 Secret。
wrangler secret put RSS_FEED_URL wrangler secret put TELEGRAM_BOT_TOKEN wrangler secret put TELEGRAM_CHANNEL_ID
# 启动本地开发服务器
yarn dev
# 运行测试
yarn testyarn deploy- ⏰ Cron 定时器触发(每小时)
- 📡 抓取最新的 RSS Feed 内容
- 🔍 过滤出过去 24 小时内发布的文章
- 💾 查询 KV 存储,排除已发送过的文章
- 📤 将新文章推送到 Telegram
- ✅ 标记文章为已处理(记录保留 7 天)
MIT