module
Version:
v0.0.0-...-d70fc70
Opens a new window with list of versions in this module.
Published: May 22, 2025
License: MIT
Opens a new window with license information.
README
¶
Go 语言编写的 RSS 订阅推送机器人,可以将 RSS 源的更新实时推送到 Telegram 频道/群组。
功能
- 🚀 支持多个 RSS 源订阅
- RSS源支持多个 Telegram 频道/群组推送
- 🎨 自定义消息模板(支持 Markdown 格式),自动转换RSS源中的HTML为MD格式
- 🛡️ 自动过滤 30 天以前的旧文章
- ⚡️ 可靠的推送机制
- 消息发送失败自动重试(最多 3 次)
- 程序意外终止后的状态恢复,防止重复推送
- 🎉 配置文件修改后自动应用,无需重启服务
配置文件
默认在 config/config.yaml 中配置你的 RSS 源和 Telegram 频道:
配置文件也可以使用-config参数指定
config/config.example
🐳运行
建议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页面提供的最新版本二进制程序
配置说明
Telegram 配置
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
Directories
¶
|
|
|
internal
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Click to show internal directories.
Click to hide internal directories.