部署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 拉取镜像创建实例容器并运行
      2. 2.2.2 创建数据库及用户
    3. 2.3 使用OneinStack搭建Nginx并进行配置
      1. 2.3.1 OneinStack简介
      2. 2.3.2 使用OneinStack搭建Nginx服务
      3. 2.3.3 创建网站开启HTTPS
      4. 2.3.4 配置反向代理
    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自动生成
    3. 3.3 使用 RSS-proxy 制作订阅源
      1. 3.3.1 RSS-proxy简介
      2. 3.3.2 RSS-proxy部署
      3. 3.3.3 RSS-proxy使用
  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 拉取镜像创建实例容器并运行

1
2
3
4
5
6
7
8
9
$ docker pull mysql:5.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
$ docker update mysql --restart=always

命令解释说明:

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

说明:如果是挂载已有的其他服务器数据,可能会出现用户权限问题,如果网络是通的,建议使用Navicat的数据传输功能(工具——数据传输——配置源与目标链接——选择需要传输的数据表即可),数据传输速度很快。

2.2.2 创建数据库及用户

在本地使用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 '你的用户名'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;

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

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

2.3 使用OneinStack搭建Nginx并进行配置

2.3.1 OneinStack简介

项目简介:OneinStack是一套部署开发环境的脚本工具,它的部署方式是纯原生部署,我主要使用里面的Nginx,用来辅助生成配置。

项目地址:https://github.com/oneinstack/oneinstack

2.3.2 使用OneinStack搭建Nginx服务

1
$ wget -c http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --nginx_optio

注:OneinStack采用编译安装的方式搭建Nginx服务,速度比较慢,请耐心等待,常用的默认目录有:

1
2
3
Nginx安装目录: /usr/local/nginx
Nginx配置目录:/usr/local/nginx/conf
网站数据目录:/data/wwwroot/域名

2.3.3 创建网站开启HTTPS

OneinStack 内置了 acme.sh,它会自动帮你申请 SSL 证书。

1
2
$ cd ./oneinstack
$ ./vhost.sh

配置过程的参考示例如下(示例域名为www.demo.com):

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#######################################################################
# OneinStack for CentOS/RedHat 7+ Debian 8+ and Ubuntu 16+ #
# For more information please visit https://oneinstack.com #
#######################################################################

What Are You Doing?
1. Use HTTP Only
2. Use your own SSL Certificate and Key
3. Use Let's Encrypt to Create SSL Certificate and Key
q. Exit
Please input the correct option: 2 【选择2】

Please input domain(example: www.example.com): www.demo.com 【输入域名】
domain=www.demo.com

Please input the directory for the domain:www.demo.com :
(Default directory: /data/wwwroot/www.demo.com): 【回车,使用默认配置】
Virtual Host Directory=/data/wwwroot/www.demo.com

Create Virtul Host directory......
set permissions of Virtual Host directory......

Do you want to add more domain name? [y/n]: n 【输入n,不添加其他域名了】

Do you want to redirect all HTTP requests to HTTPS? [y/n]: y 【输入y,强制HTTPS】

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.

Country Name (2 letter code) [CN]: 【回车】

State or Province Name (full name) [Shanghai]: 【回车】

Locality Name (eg, city) [Shanghai]: 【回车】

Organization Name (eg, company) [Example Inc.]: 【回车】

Organizational Unit Name (eg, section) [IT Dept.]: 【回车】

Do you want to add hotlink protection? [y/n]: n 【输入n,不需要防盗链保护】

Allow Rewrite rule? [y/n]: y 【输入y,允许重写规则】

Please input the rewrite of programme :
wordpress,opencart,magento2,drupal,joomla,codeigniter,laravel
thinkphp,pathinfo,discuz,typecho,ecshop,nextcloud,zblog,whmcs rewrite was exist.
(Default rewrite: other): 【回车】
You choose rewrite=other

Allow Nginx/Tengine/OpenResty access_log? [y/n]: y 【输入y,允许日志记录】
You access log file=/data/wwwlogs/www.demo.com_nginx.log

#######################################################################
# OneinStack for CentOS/RedHat 7+ Debian 8+ and Ubuntu 16+ #
# For more information please visit https://oneinstack.com #
#######################################################################
Your domain: nwww.demo.com
Virtualhost conf: /usr/local/nginx/conf/vhost/www.demo.com.conf
Directory of: /data/wwwroot/www.demo.com
Rewrite rule: /usr/local/nginx/conf/rewrite/other.conf
Self-signed SSL Certificate: /usr/local/nginx/conf/ssl/www.demo.com.crt
SSL Private Key: /usr/local/nginx/conf/ssl/www.demo.com.key
SSL CSR File: /usr/local/nginx/conf/ssl/www.demo.com.csr

配置完成后,修改一下配置文件

1
$ vim /usr/local/nginx/conf/vhost/www.demo.com.conf

server模块删除内容:

1
2
3
4
5
6
7
8
9
10
location ~ [^/]\.php(/|$) {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}

location /.well-known {
allow all;
}

server模块新增内容:

1
2
3
4
5
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
allow all;
root /data/wwwroot/www.demo.com/; # 把路径换一下
}

检查并重载Nginx配置

1
2
$ nginx -t
$ nginx -s reload

注:使用nginx -t 命令可以检查Nginx配置,若出现如下内容则说明配置正确。

1
2
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

之后把资源文件放置到 /data/wwwroot/www.demo.com 目录即可,打开Chrome浏览器即可访问(如果出现403则需要给这个目录添加一下权限)。

2.3.4 配置反向代理

如果需要配置反向代理的话(比如Docker部署的服务),流程同上,只是修改Nginx配置文件处有所不同。

server模块删除内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
location ~ [^/]\.php(/|$) {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
expires 7d;
access_log off;
}
location /.well-known {
allow all;
}

server模块新增内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
location / {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://demo; # 与下面 upstream 的名称一致即可
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
proxy_pass http://demo; # 与下面 upstream 的名称一致即可
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
proxy_pass http://demo; # 与下面 upstream 的名称一致即可
expires 7d;
access_log off;
}
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
allow all;
root /data/wwwroot/www.demo.com/; # 把路径换一下
}

与server模块同级新增内容:

1
2
3
upstream demo {
server 127.0.0.1:8888; # 8888换成自己的反向代理端口号
}

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

通用的创建网站开启HTTPS并配置反向代理见本文2.3节。

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

3.3 使用 RSS-proxy 制作订阅源

除了 RSSHub 之外,还可使用 RSS-proxy 来制作订阅源,作为前者补充使用,但后者也有些网站不支持生成RSS订阅。

3.3.1 RSS-proxy简介

简介:RSS-proxy 是一个工具,它允许您创建几乎任何网站的 RSS/ATOM 或 JSON 提要,仅通过分析静态 HTML 结构。

项目地址:https://github.com/damoeb/rss-proxy

3.3.2 RSS-proxy部署

部署方式:通过Docker进行部署。

1
2
3
$ docker pull damoeb/rss-proxy
$ docker run -itd -p 3000:3000 --name rss-proxy damoeb/rss-proxy
$ docker update rss-proxy --restart=always

Chrome打开 http://ip:3000 进行访问,至于反向代理与开启HTTPS同上,就不赘述了。

3.3.3 RSS-proxy使用

打开RSS-proxy页面,在左边的输入框粘贴上订阅地址,点击Show Feeds,然后

RSS-proxy制作订阅源

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