跳到主要内容
  1. 所有文章/

使用 flowerss 部署 Telegram RSS 订阅机器人

·2140 字·约 5 分钟
哪个男孩不想拥有一个自己的 RSS 机器人呢?

简介 #

GitHub 上开源的可以自部署的 Telegram RSS 订阅机器人有很多,而 Flowerss 除了常见的 RSS 订阅功能外,还支持通过 Telegraph Token 将抓取的 RSS 源更新的内容转存进 Telegraph 里,并生成支持 Telegram 应用内即时预览(Instant View)的链接。

特性:

  • 常见的 RSS Bot 该有的功能
  • 支持 Telegram 应用内即时预览
  • 支持为 Group 和 Channel 订阅 RSS 消息
  • 丰富的订阅设置

部署 #

我尝试了 二进制部署Docker部署 两种方式,这里记录下

Docker 部署 #

安装好 Docker 后,通过 SSH 登录目标主机,开始操作

# 新建flowerss目录
mkdir ~/flowerss
# 下载配置文件
wget -O ~/flowerss/config.yml https://raw.githubusercontent.com/indes/flowerss-bot/master/config.yml.sample
# 编辑配置文件
vim ~/flowerss/config.yml
# 运行容器
docker run -d -v ~/flowerss:/root/.flowerss indes/flowerss-bot

或者使用 docker-compose 部署

# 安装最新版 docker-compose,将 1.29.2 换成你需要的版本号
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 给予权限
sudo chmod +x /usr/local/bin/docker-compose
# 创建软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 验证安装
docker-compose --version
# 类似输出如下:
root@debian:~# docker-compose --version
docker-compose version 1.29.2, build 5becea4c

这是一个示例 compose.yml 模板

version: '3.1'

services: 
  flowerss:
    image: indes/flowerss-bot
    volumes: 
      - ./config:/root/.flowerss
    restart: unless-stopped
    environment: 
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
    networks: 
      - default

开始 docker-compose 部署

# 新建目录
cd /opt && mkdir flowerss
# 新建映射目录
cd flowerss && mkdir config
# 新建配置文件
cd config && touch config.yml 
# 编辑配置文件,参考上面示例配置文件写入
vim config.yml
# 运行容器
docker-compose up -d

二进制部署 #

直接下载已经编译好的二进制程序

# 新建并进入程序目录
mkdir /opt/flowerss && cd $_
# 64位系统下载(本教程不保证一直更新,请实际使用时更改下面的release版本号(如 v0.8.3)为最新版本号)
curl -LJO https://github.com/indes/flowerss-bot/releases/download/v0.8.3/flowerss-bot-v0.8.3-linux-amd64.tar.gz
# 32位系统下载
curl -LJO https://github.com/indes/flowerss-bot/releases/download/v0.8.3/flowerss-bot-v0.8.3-linux-386.tar.gz
# 下面以64位为例,32位的修改下文件名跟32位Release包文件名一致即可
# 解压到项目目录
tar zxvf  flowerss-bot-v0.8.3-linux-amd64.tar.gz
# 删除Release包
rm flowerss-bot-v0.8.3-linux-amd64.tar.gz

此时 flowerss 程序目录应该像下面这样

.
└── opt                          # 项目父文件夹
    └── flowerss                 # 项目目录
        ├── README.md            # 项目 README
        ├── config.yml.sample    # 示例配置文件
        └── flowerss-bot         # 程序的二进制文件

确认无误后继续

# 重命名示例配置文件为实际配置文件
mv config.yml.sample config.yml
# 修改配置文件
vim config.yml
# 给予权限
chmod +x flowerss-bot
# 运行 flowerss(断开终端进程就会结束)
./flowerss-bot
# 运行 flowerss(断开终端进程仍然运行)
nohup ./flowerss-bot &

直接运行的话在服务器重启后进程就会结束,因此我们还需要配置下开机自启

# 编辑systemd配置文件 EOF结束
cat > /etc/systemd/system/flowerss.service <<EOF

[Unit]
Description=flowerss
After=network.target
Wants=network.target

[Service]
Type=simple
PIDFile=/var/run/flowerss.pid
WorkingDirectory=/root/opt/flowerss
ExecStart=/root/opt/flowerss/flowerss-bot
RestartPreventExitStatus=23
Restart=always

[Install]
WantedBy=multi-user.target
EOF

编辑好 flowerss 的 systemd 配置文件后

# 重载配置
systemctl daemon-reload
# 启动程序
systemctl start flowerss
# 开机自启
systemctl enable flowerss

源码编译部署 #

这个方式对我个人而言意义不大,所以 我并没有试过,程序是用 Golang 写的,所以在编译开始前应该需要在服务器配置好 Golang 的环境

# 拉取项目仓库代码并进入目录
git clone https://github.com/indes/flowerss-bot && cd flowerss-bot
# 编译项目
make build
# 运行flowerss
./flowerss-bot
# 后面的配置和二进制部署方式无异

配置 #

上面的三种方式对应的配置文件都是一样的 config.yml ,模板如下

bot_token: XXX
#多个telegraph_token可采用数组格式:
# telegraph_token:
#  - token_1
#  - token_2
telegraph_token: xxxx
user_agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
preview_text: 0
disable_web_page_preview: false
socks5: 127.0.0.1:1080
update_interval: 10
error_threshold: 100
telegram:
  endpoint: https://xxx.com/
mysql:
  host: 127.0.0.1
  port: 3306
  user: user
  password: pwd
  database: flowerss
sqlite:
  path: ./data.db
allowed_users:
  - 123
  - 234

配置项说明 #

配置文件各字段说明

字段说明
bot_tokenTelegram Bot Token必填
telegraph_tokenTelegraph Token, 用于转存原文到 Telegraph可忽略(不转存原文到 Telegraph)
preview_text纯文字预览字数(不借助Telegraph)默认 0, 0 为禁用
user_agentUser Agent可忽略
disable_web_page_preview是否禁用 web 页面预览默认 false, true 为禁用
update_intervalRSS 源扫描间隔(分钟)默认 10
error_threshold源最大出错次数默认 100
socks5用于无法正常 Telegram API 的环境默认无
mysqlMySQL 数据库配置可忽略(默认使用 SQLite)
sqliteSQLite 配置可忽略
telegram.endpoint自定义 telegram bot api可忽略(使用默认)
allowed_users允许使用 bot 的用户 id为空时所有用户都能使用 bot

获取 Bot Token #

Telegram 搜索 @BotFather 点击 start 开始,发送命令 /newbot 创建一个 Telegram 机器人

根据提示给 Bot 取一个用户名和昵称,结束后会获得一个 Telegram Bot Token ,即:Use this token to access the HTTP API: 后面一行的内容,记录下来填入配置文件

获取 Telegraph Token #

Telegram 应用内预览需要 Telegraph API,因此我们还需要申请一个 Telegraph Token,在终端执行命令

curl https://api.telegra.ph/createAccount?short_name=${bot_name}&author_name=${bot_author_name}&author_url=${bot_author_url}
  • ${bot_name}:Telegram Bot 用户名
  • ${bot_author_name}:作者名称( 显示在即时预览里 )
  • ${bot_author_url}:作者连结( 显示在即时预览里 )

将其中一些变量改成自己想要的,比如:

curl https://api.telegra.ph/createAccount?short_name=Dejavu_RSS&author_name=Dejavu&author_url=https://dejavu.moe

成功的话会返回一个 json 字符串,记录下来保留备用

Telegram ID #

默认的配置允许所有人使用我们创建的 Telegram Bot,为了安全、防止滥用建议设置指定用户才有权使用该 Bot,获取管理员用户的 Telegram ID 并填入配置文件的 allowed_users 字段:

Telegram 全局搜索 @getmyid_bot 发送命令 /start 即可获取 Telegram ID 了,填入配置文件中即可

使用 #

照搬 作者文档 如下:

个人使用

/sub [url] 订阅(url 为可选)
/unsub [url] 取消订阅(url 为可选)
/list 查看当前订阅
/set 设置订阅
/check 检查当前订阅
/setfeedtag [sub id] [tag1] [tag2] 设置订阅标签(最多设置三个Tag,以空格分隔)
/setinterval [interval] [sub id] 设置订阅刷新频率(可设置多个sub id,以空格分隔)
/activeall 开启所有订阅
/pauseall 暂停所有订阅
/import 导入 OPML 文件
/export 导出 OPML 文件
/unsuball 取消所有订阅
/help 帮助

群组/频道使用

/sub @ChannelID [url] 订阅
/unsub @ChannelID [url] 取消订阅
/list @ChannelID 查看当前订阅
/check @ChannelID 检查当前订阅
/unsuball @ChannelID 取消所有订阅
/activeall @ChannelID 开启所有订阅
/setfeedtag @ChannelID [sub id] [tag1] [tag2]  设置订阅标签(最多设置三个Tag,以空格分隔)
/import 导入 OPML 文件
/export @ChannelID 导出 OPML 文件
/pauseall @ChannelID 暂停所有订阅

ChannelID 只有设置为 Public Channel 才有。如果是 Private Channel,可以暂时设置为 Public,订阅完成后改为 Private,不影响 Bot 推送消息

例如要给 t.me/debug 频道订阅 阮一峰的网络日志

  1. 将 Bot 添加到 debug 频道管理员列表中
  2. 给 Bot 发送 /sub @debug http://www.ruanyifeng.com/blog/atom.xml 命令

好用的话记得给 项目 一个 ⭐Star 哦~

Dejavu Moe
作者
Dejavu Moe
Not for success, just for growing.