部署RSSHub并使用Telegram-bot推送

  1. 1. 基本概念
    1. 1.1 RSS简介
    2. 1.2 RSSHub简介
    3. 1.3 Telegram Bot简介
    4. 1.4 Flowerss Bot 简介
    5. 1.5 成品展示
  2. 2. 部署前的准备工作
    1. 2.1 Docker环境搭建
    2. 2.2 Docker-MySQL环境搭建
      1. 2.2.1 搜索MySQL镜像
      2. 2.2.2 拉取MySQL镜像
      3. 2.2.3 创建实例容器并运行
      4. 2.2.4 创建数据库及用户
    3. 2.3 申请泛域名证书
      1. 2.3.1 安装 acme.sh
      2. 2.3.2 生成SSL泛域名证书
    4. 2.4 申请Telegram Bot
      1. 2.4.1 申请 Telegram Bot
      2. 2.4.2 修改 Telegram Bot 头像
  3. 3. 部署RSSHub制作RSS源
    1. 3.1 使用Docker部署RSSHub
      1. 3.1.1 拉取镜像并部署RSSHub
      2. 3.1.2 设置反向代理并开启HTTPS
    2. 3.2 使用RSSHub制作RSS源
      1. 3.2.1 根据官方文档手工制作
      2. 3.2.2 使用RSSHub-Radar自动生成
  4. 4. 部署 Flowerss Bot 订阅 RSS
    1. 4.1 Docker部署Flowerssr bot
    2. 4.2 Flowerssr bot 的使用
  5. 5. 参考资料

1. 基本概念

1.1 RSS简介

RSS(Really Simple Syndication):简易信息聚合,当网站内容更新时,可以通过订阅RSS源在Telegram Bot、RSS阅读器上获取更新的信息。可以打造自己的订阅生态圈,以保证内容的高质量。

RSS源:一些个人博客网站大多都有主动提供,而主流的社交媒体网站为了打造自己的内容闭环,通常主动不提供,可以通过RSSHub抓取生成。

1.2 RSSHub简介

RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以给任何奇奇怪怪的内容生成 RSS 订阅源。RSSHub 借助于开源社区的力量快速发展中,目前已适配数百家网站的上千项内容。号称“万物皆可RSS”。

项目地址:https://github.com/DIYgod/RSSHub

1.3 Telegram Bot简介

Telegram Bot 是基于 Telegram 客户端的第三方程序。 用户可以通过向Bot发送信息、照片、指令、在线请求等一系列的方式与Bot互动。 Bot的所有者通过 Bot 的API 访问并请求Telegram Server的信息。

1.4 Flowerss Bot 简介

flowerss bot 是一个支持应用内即时预览的 Telegram RSS Bot,有着丰富的订阅设置,可以作为个人订阅和频道订阅。

项目地址:https://github.com/indes/flowerss-bot

1.5 成品展示

RSSBot订阅成品

2. 部署前的准备工作

以下所有服务均选择自建,我将采用宝塔面板与Docker混合部署的方式(宝塔面板安装Nginx环境并开启HTTPS,Docker安装MySQL、RSSHub、Flowerssr),VPS系统用的是Debian 10 x86_64。

VPS的购买及配置、域名解析、宝塔面板的搭建及使用、Docker的概念及使用…这些基本的就不再赘述了,如果不会的话见我的另一篇博客:VPS基本部署环境的搭建与配置

如果你对Telegram和Telegram Bot还不够熟悉,可以先去看看我的另一篇博客:Telegram及Telegram Bot使用指南

2.1 Docker环境搭建

1
2
3
4
$ apt-get update -y && apt-get install curl -y  # 安装curl
$ curl https://get.docker.com | sh - # 安装docker
$ sudo systemctl start docker # 启动docker服务
$ docker version # 查看docker版本(客户端要与服务端一致)

2.2 Docker-MySQL环境搭建

2.2.1 搜索MySQL镜像

1
$ docker search mysql

docker-mysql

通常选择OFFICIAL里Star数最多的那个镜像,即mysql。

2.2.2 拉取MySQL镜像

1
$ docker pull mysql:5.7

2.2.3 创建实例容器并运行

1
2
3
4
5
6
7
$ docker run -p 3306:3306 --name mysql \
-e TZ=Asia/Shanghai \
-v /mydocker/mysql/conf:/etc/mysql/conf.d \
-v /mydocker/mysql/logs:/var/log/mysql \
-v /mydocker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=[password] \
-d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

命令解释说明:

1
2
3
4
5
6
7
8
9
10
-p 3306:3306:将主机的3306端口映射到docker容器的3306端口。
--name mysql:运行服务名字
-e TZ=Asia/Shanghai:时区是使用了世界标准时间(UTC)。因为在中国使用,所以需要把时区改成东八区的。
-v /mydocker/mysql/conf:/etc/mysql/conf.d :将主机/mydocker/mysql录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d
-v /mydocker/mysql/logs:/var/log/mysql:将主机/mydocker/mysql目录下的logs目录挂载到容器的 /logs。
-v /mydocker/mysql/data:/var/lib/mysql :将主机/mydocker/mysql目录下的data目录挂载到容器的 /var/lib/mysql
-e MYSQL_ROOT_PASSWORD=[password]:初始化 root 用户的密码。
-d mysql:5.7 : 后台程序运行mysql5.7
--character-set-server=utf8mb4 :设置字符集
--collation-server=utf8mb4_unicode_ci:设置校对集

设置开机自启

1
$ docker update mysql --restart=always

2.2.4 创建数据库及用户

在本地使用Navicat工具使用root用户连接上该数据库(国外服务器建议配置代理),使用如下四条命令创建数据库及用户。

1
2
3
4
5
6
7
8
9
10
11
--创建新的数据库,并设置数据库编码
$ CREATE DATABASE 你的数据库名 DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci;

--创建新的用户
$ CREATE USER '你的用户名'@'你的服务器IP' IDENTIFIED BY '你的密码';

--把数据库的管理权限给予刚刚创建的MySQL用户
$ GRANT ALL PRIVILEGES ON *.* TO '你的用户名'@'%';

--刷新权限,使用设置生效
$ FLUSH PRIVILEGES;

注:如果连接数据库时出现Access denied for user '用户名'@'某IP' (using password: YES)问题,则是第三句授权出了问题,你的本地外网IP被拦截了,那个’%’代表的是访问IP不受限制。

2.3 申请泛域名证书

SSL证书是一种数字证书,用于加密从用户的浏览器发送到Web服务器的数据。 通过这种方式,发送的数据对于使用Wireshark等数据包嗅探器来拦截和窃听您的通信的黑客来说是安全的。

Chrome一直在推动https,所有的http协议网站被标记为不安全,如果再不对网站进行https改造的话,那么可能会对信任度造成一定的影响,所以说对一个面向用户的网站来说,开启https是非常有必要的。

下面将使用acme.sh开源项目申请免费的 Let’s Encrypt 泛域名SSL证书。

注:如果懒得折腾泛域名证书,也可在宝塔面板直接傻瓜式申请Let’s Encrypt的单域名SSL证书(宝塔面板——网站——设置——SSL——Let’s Encrypt——勾选域名,点文件验证——申请出来后设置强制HTTPS)。

2.3.1 安装 acme.sh

1
$ curl  https://get.acme.sh | sh

acme.sh

普通用户和 root 用户都可以安装使用,安装过程进行了以下几步:

  • [1] 把 acme.sh 安装到你的 root 目录下,并创建 一个 bash 的 alias, 方便你的使用。

  • [2] 自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。

注:安装过程不会污染已有的系统任何功能和文件,所有的修改都限制在安装目录中。那个socat未安装的问题不用管,那是http验证无Web Server时才需要的。

2.3.2 生成SSL泛域名证书

acme.sh 实现了 acme 协议支持的所有验证协议,一般有两种方式验证:http 和 dns 验证。

  • http 验证:http 方式需要在你的网站根目录下放置一个文件,来验证你的域名所有权。
  • dns 验证:dns 方式,在域名上添加一条 txt 解析记录,验证域名所有权。

dns 方式的可以使用域名解析商提供的 API 自动添加 txt 记录完成验证,下面我们将采用这种方法申请Namesilo的泛域名证书。

Step1:打开 https://www.namesilo.com/account/api-manager 去申请 NameSilo API,勾选第2个复选框,点击Generate,即可生成。

申请NameSilo API

注:务必不要勾选上Generate key for read-only access的哪个复选框,否则会导致Unable to add the DNS record. Error add txt for domain的问题。另外,生成的API只出现一次,如果没记下来只能重置。

Step2:在服务器输入以下命令,实现自动dns验证生成泛域名证书。

1
2
3
$ cd /root/.acme.sh
$ export Namesilo_Key="xxxxxxxxxxxxxxxxxxxxxxxx"
$ ./acme.sh --issue --dns dns_namesilo --dnssleep 1800 -d example.com -d *.example.com

等待1800s即可看到申请下来的SSL证书(NameSilo的验证比较慢,官方文档上写的900s有时不足以验证完)

申请下来的SSL证书

生成文件都放在/root/.acme.sh/example.com/目录下,其中:example.com.key是密钥文件,fullchain.cer是证书文件。

注:如果你的域名不是NameSilo的,上述操作有所不同,具体请参考: https://github.com/acmesh-official/acme.sh/wiki/dnsapi

2.4 申请Telegram Bot

2.4.1 申请 Telegram Bot

找 BotFather 官方机器人申请自己的 Telegram Bot,需要记录下:BotName、TOKEN、CHATID等信息。

  • Step1:在Telegram中添加BotFather这个账号,然后依次发送/start/newbot,按照提示即可创建一个新的机器人。记下来给你生成的token。
  • Step2:搜索刚刚创建的机器人的名字,并给它发送一条消息。(注意:需要先与机器人之间创建会话,机器人才能下发消息,否则机器人无法主动发送消息)
  • Step3:在Telegram中搜索userinfobot,并给它发送一条消息,它会返回给你chatid,将它也记下来。

2.4.2 修改 Telegram Bot 头像

还是找 BotFather 官方机器人,先发送/setuserpic,它会让你选择为哪个Bot修改,选择完之后发送头像图片给它即可。

注:头像以图片的形式发送,不要以文件的形式发送(发送时点上那个压缩图片即为图片的形式发送)

3. 部署RSSHub制作RSS源

官方提供的服务是https://rsshub.app/,用的人太多,容易失效,强烈建议自己部署 RSSHub 服务。

3.1 使用Docker部署RSSHub

以下我采用了最简的部署方式,一些高级配置我都没有配,会导致部分服务用不了,详见官方文档:https://docs.rsshub.app/en/install/

3.1.1 拉取镜像并部署RSSHub

依次执行以下三条命令,拉取镜像并部署RSSHub,然后设置了开机自启

1
2
3
$ docker pull diygod/rsshub
$ docker run -d --name rsshub -p 1200:1200 diygod/rsshub
$ docker update rsshub --restart=always

这时我们用Chrome打开http://ip:1200/路径,即可看到以下页面,说明部署成功。

RSSHub部署成功

3.1.2 设置反向代理并开启HTTPS

Step1:开启HTTPS

打开宝塔面板——网站——设置——SSL——其他证书,把example.com.key密钥文件、fullchain.cer证书文件复制上去,强制https。

Step2:设置反向代理

宝塔面板——网站——设置——反向代理——添加反向代理——填写代理名称和目标URL(http://127.0.0.1:1200)

设置完之后,我们部署的服务地址即为:https://域名/

3.2 使用RSSHub制作RSS源

3.2.1 根据官方文档手工制作

RSSHUB的使用方法非常简单,查看 RSSHub使用手册 拼接出对应服务的订阅地址即可。

RSSHub生成的RSS订阅地址基本模板为:RSSHub服务地址/订阅的网站路由/订阅页面id

说明:RSSHub服务地址就是你刚才搭建的那个服务地址,把它替换掉官方的https://rsshub.app/,订阅的网站路由查看官方文档,订阅页面id去目标网站获取。

RSSHub支持的平台非常之多,几乎你能想象到的都支持,要么怎么叫万物皆可RSS呢,下面给出几个我常用的,摘自官方文档。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[1] Bilibili UP主投稿
举例: https://rsshub.app/bilibili/user/video/2267573
路由: /bilibili/user/video/:uid/:disableEmbed?
参数:
uid, 必选 - 用户 id, 可在 UP 主主页中找到
disableEmbed, 可选 - 默认为开启内嵌视频, 任意值为关闭

[2] 知乎热榜
举例: https://rsshub.app/zhihu/hotlist
路由: /zhihu/hotlist
参数: 无

[3] 知乎用户动态
举例: https://rsshub.app/zhihu/people/activities/diygod
路由: /zhihu/people/activities/:id
参数:
id, 必选 - 作者 id, 可在用户主页 URL 中找到

[4] 豆瓣 正在上映的高分电影
举例: https://rsshub.app/douban/movie/playing/7.5
路由: /douban/movie/playing/:score
参数:
score, 必选 - 返回大于等于这个分数的电影

[5] 豆瓣 即将上映的电影
举例: https://rsshub.app/douban/movie/later
路由: /douban/movie/later
参数: 无

[6] Github Trending
举例: https://rsshub.app/github/trending/daily/javascript
路由: /github/trending/:since/:language?
参数:
since, 必选 - 时间跨度, 可在 Trending 页 URL 中找到, 可选 daily weekly monthly
language, 可选 - 语言, 可在 Trending 页 URL 中找到

[7] 腾讯视频 播放列表
举例: https://rsshub.app/tencentvideo/playlist/jx7g4sm320sqm7i
路由: /tencentvideo/playlist/:id
参数:
id, 必选 - 播放列表 ID,可以在 URL 中找到

[8] 原神 动态
举例: https://rsshub.app/yuanshen
路由: /yuanshen/:location?/:category?
参数:
location, 可选 - 区域,可选 zh_CN 或 zh_TW
category, 可选 - 分类,(最新:latest、新闻:news、公告:notice、活动:activity),默认为最新

注:有些服务可能用不了,因为在部署服务时略过了一些高级配置,非要用的话去看官方文档自己研究一下对应的配置。

3.2.2 使用RSSHub-Radar自动生成

RSSHub-Radar 是 RSSHub 的衍生项目,是一个可以帮助你快速发现和订阅当前网站 RSS 和 RSSHub 的浏览器扩展。

  • 快速发现和订阅当前页面自带的 RSS
  • 快速发现和订阅当前页面支持的 RSSHub
  • 快速发现当前网站支持的 RSSHub
  • 支持一键订阅 RSS 到 Tiny Tiny RSS、Miniflux、FreshRSS、Nextcloud News、Feedly、Inoreader、Feedbin、The Old Reader、Feeds.Pub、BazQux Reader、本地阅读器

RSSHub-Radar

Chrome商店安装:https://chrome.google.com/webstore/detail/kefjpfngnndepjbopdmoebkipbgkggaa

压缩包解压安装:https://github.com/DIYgod/RSSHub-Radar/releases

4. 部署 Flowerss Bot 订阅 RSS

Flowerssr bot支持多种部署方式,下面我将以 Docker 的方式部署 Flowerssr bot,数据库选择的是MySQL,VPS系统用的是Debian 10 x86_64。其他方式见:Flowerssr bot 使用文档

4.1 Docker部署Flowerssr bot

Step1:下载配置文件,在项目目录下新建 config.yml 文件

1
2
3
$ mkdir ~/flowerss &&\
wget -O ~/flowerss/config.yml \
https://raw.githubusercontent.com/indes/flowerss-bot/master/config.yml.sample

Step2:修改配置文件(主要是填写Telegram bot Token和数据库信息,其他的按需修改即可)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
bot_token: 你的Telegram Bot Token(必填)
telegraph_token:
telegraph_account:
telegraph_author_name:
telegraph_author_url:
socks5:
update_interval: 10
user_agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36

mysql:
host: 数据库IP(必填)
port: 数据库端口号(必填)
user: 数据库用户(必填)
password: 数据库密码(必填)
database: 数据库名称(必填)

telegram:
endpoint:

log:
level: release
db_log: false # 打印数据库日志,false则只会打印数据库错误日志

sqlite:
path: ./data.db

allowed_users:

配置说明:

Flowerssr-bot配置说明

Step3:创建实例容器并运行

1
2
$ docker run -d --name rssbot -v ~/flowerss:/root/.flowerss indes/flowerss-bot  
$ docker update rssbot --restart=always

正常的话就可以使用了,如果没有部署成功,可以用下面命令看一下日志

1
$ docker logs -f rssbot --tail 100

4.2 Flowerssr bot 的使用

主要分为个人订阅(在Bot里推送)和频道订阅(在频道里推送)flowerss-bot,具体使用可以在 Flowerssr bot 里面使用/help命令查看帮助。

[1] 个人订阅

1
2
3
4
5
6
7
8
9
10
11
12
13
/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 帮助

[2] 频道订阅

Step1:将 Bot 添加为 Channel 管理员

Step2:发送相关命令给 Bot

1
2
3
4
5
6
7
8
9
10
/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 推送消息。

5. 参考资料

[1] RSSHub项目地址 from Github

[2] RSSHub部署 from 官方文档

[3] RSSHub使用手册 from 官方文档

[4] Telegram Bot 使用文档 from cnblogs

[5] Telegram RSS机器人 Flowerssr bot from 勿埋我心

[6] flowerss-bot项目地址 from Github

[7] flowerss-bot使用说明 from 官方文档

[8] 简化查找和订阅 RSS 和 RSSHub 的浏览器扩展 from Github