Go 语言编写的 RSS 订阅推送机器人,可以将 RSS 源的更新实时推送到 Telegram 频道/群组。
- 🚀 支持多个 RSS 源订阅
- RSS源支持多个 Telegram 频道/群组推送
- 🎨 自定义消息模板(支持 Markdown 格式),自动转换RSS源中的HTML为MD格式
- 🛡️ 自动过滤 30 天以前的旧文章
- 自动清理过期的文章记录(30 天)
- ⚡️ 可靠的推送机制
- 消息发送失败自动重试(最多 3 次)
- 程序意外终止后的状态恢复,防止重复推送
- 🎉 配置文件修改后自动应用,无需重启服务
默认在 config/config.yaml
中配置你的 RSS 源和 Telegram 频道:
配置文件也可以使用-config
参数指定
建议docker
方式运行
config.yaml
配置在当前目录下的rss2telegram-config
文件夹中,运行命令:
# 启动
$ docker run -d --name rss2telegram -v $(pwd)/rss2telegram-config:/app/config ghcr.io/hootrix/rss2telegram
# 停止
$ docker stop rss2telegram
# 查看运行日志
$ docker logs -f rss2telegram
也可以手动下载releases
页面提供的最新版本二进制程序
token
: Telegram Bot Token,从 @BotFather 获取- 确保你的 Bot 已被添加到目标频道,并具有发送消息的权限
name
: RSS 源名称(用于日志记录)url
: RSS 源地址channels
: 要推送到的 Telegram 频道列表(格式:@channel_name)template
: 消息模板,支持 Markdown 格式,可用变量:{title}
: 标题{link}
: 链接{content}
: 内容(如果有){description}
: 描述(如果有){pubDate}
: 发布时间(如果有)
- 变量语法:
{ field }
- 带空格的花括号语法,例如:{ title }
支持正则中使用{}
{field}
- 紧凑的花括号语法,例如:{title}
- 两种语法效果相同,可以根据个人偏好选择使用
- 支持的操作符:
允许对RSS数据进行提取/过滤/替换操作
extract
: 使用正则表达式提取内容,例如:{description|extract:([\S]+?市)}
extract-all
: 使用正则表达式提取所有匹配项,例如:{title|extract-all:(\d+折)}
prefix
: 有生成内容时添加前缀,例如:{title|extract-all:(\d+折)|prefix:#}
,{title|extract:(\d+折)|prefix:#}
replace
: 使用正则表达式替换内容,例如:{ description|extract:价格:(\d+)元|replace:\d{4}:**** }
default
: 设置默认值,当内容为空时使用,例如:{description|extract:类型:(.*?),|default:未知}
- 操作符语法:
- 使用
|
分隔多个操作符 - 操作符参数使用
:
分隔 - 支持链式操作,例如:
{field|op1:param1|op2:param2}
- 使用
- 文章过期时间: 默认 30 天,超过此时间的文章将被自动过滤
- 去重策略:
- 优先使用文章的 GUID
- 如无 GUID,使用文章链接
- 如无链接,使用标题和发布时间的组合
- 最后使用文章内容的哈希值
- 发布时间处理:
- 优先按发布时间排序(从旧到新)
- 支持处理无发布时间的文章
- 无发布时间的文章将按照 RSS 源中的顺序推送
- 重试机制: 发送失败自动重试,指数避让
- 发送间隔: 每条消息发送后等待 1 秒,避免触发 Telegram 限制
- 状态持久化: 使用布隆过滤器保存已发送文章的状态,防止重复推送
MIT License