服务部署 Step 3. RSSHub
如果你已经开始使用 RSS 订阅网站、获取信息,接下来可能发现一个问题:不是所有的网站都支持 RSS 输出。很多内容平台(如微信公众平台、淘宝、闲鱼)都在朝着开放互联网的反方向一路狂奔,使用各种方法劣化平台未注册访客或电脑端访客的体验,驱赶、逼迫用户使用平台自己的 App 并实名登录。这种平台我们便无法奢望它们能主动提供 RSS 订阅方式。另外还有一些网站虽然支持 RSS 输出,但功能格式较简陋、或不能输出全文,还有改进的空间。
RSSHub 便是一个将本不支持 RSS 输出的网站内容进行抓取,然后转换成 RSS 格式的工具。它是一个「开源、简单易用、易于扩展」的 RSS 生成器。由于开源社区每个人都可以贡献自己写的转换规则,所以整个 RSSHub 能够支持转换的网站还在快速增加中。它有一个 Slogan:
🍰 万物皆可 RSS
RSSHub 基本使用方法
RSSHub 官方提供了一个示例服务器,地址是:
https://rsshub.app
根据文档,您可以对喜欢的内容构造出 RSS 链接。
例子:假如我想订阅《南方周末》的「人物」板块,我们首先在 RSSHub 的文档中找到「南方周末」的路由,如下:
我们可以构造出我们想要的 RSS 订阅地址,格式是:
https://rsshub.app/<路由>
将文档中带冒号 :
的变量替换成自己需要的值,如「人物」板块的 :id
是 7
,那么根据规则,我们就可以构造出
https://rsshub.app/infzm/7
这样的订阅地址。把这个地址粘贴到您的 RSS 软件或 RSS 服务器中,就可以订阅了。
订阅后效果:
其他网站的 RSS 构造规则类似,按照「说明书」使用即可,非常方便。
自建 RSSHub 的理由
注 2:本文自建 RSSHub 容器要成功运行,前提是已经完成前面文章中启动 Traefik 容器的步骤。
更好的消息是,RSSHub 整个程序是开源并支持自建(Self Hosting)的,也就是我们可以把这套程序放在自己的服务器上,假设我们自建的 RSSHub 服务器地址是 rsshub.my-example.com
,那么上面南方周末的例子中,我们就可以将官方示例服务器地址替换成自己的地址,也就是
https://rsshub.my-example.com/infzm/7
自建的理由有很多。其中之一是应对网站的反爬。因为 RSSHub 的基本原理是,其服务器程序去抓取目标网站的内容,然后转换成 RSS 格式,数据的流向是:
RSS 客户端 <== RSS 服务器 <== RSSHub 服务器 <== 目标网站
如果大家都使用官方的 RSSHub 服务器来抓取目标网站的内容,有可能造成 RSSHub 官方服务器对目标网站抓取过于频繁,进而目标网站可能采取防御措施,例如屏蔽掉 RSSHub 官方示例服务器的 IP 地址。导致从此以后所有使用官方示例的服务器的人都抓取不到该网站的内容。如果我们自建 RSSHub 服务器,由于我们自己的服务器可能只有一两个人在用,频率低,不容易被目标网站封禁。在实践中,我确实也发现有部分网站,存在 RSSHub 官方服务器订阅不了,但自建服务器可以订阅的情况。
自建同时也可以减轻 RSSHub 官方示例服务器的压力。
Docker-Compose 自建 RSSHub 服务器
有了前面两篇用 Docker 和 Traefik (1, 2)搭建服务的基础之后,RSSHub 的自建相对而言简单得很。由于它只是一个 Converter,不需要保存任何数据,所以我们的容器也不需要挂载额外的数据卷,docker-compose.yml
文件非常短:
mkdir -p ~/site/rsshub
cd ~/site/rsshub
vim docker-compose.yml
# docker-compose.yml
version: "3.5"
services:
rsshub:
image: diygod/rsshub
restart: always
container_name: rsshub
expose:
- 1200
labels:
- "traefik.enable=true"
# Replace with your own hostname
- "traefik.http.routers.rsshub.rule=Host(`rsshub.my-example.com`)"
- "traefik.http.routers.rsshub.entrypoints=websecure"
- "traefik.http.routers.rsshub.tls.certresolver=mydnschallenge"
- "traefik.docker.network=traefik"
- "traefik.http.middlewares.rsshub.headers.stsSeconds=311040000"
- "traefik.http.middlewares.rsshub.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.rsshub.headers.stsPreload=true"
networks:
- traefik
- default
networks:
traefik:
external:
name: traefik
default:
有了前面文章的基础,这个配置文件里也没有任何新鲜内容需要额外解释了。保存好 docker-compose.yml
文件后,直接
docker-compose up -d
在浏览器里访问自建 RSSHub 服务的网址 https://rsshub.my-example.com
,如果看到
便大功告成。接下来按照前一节描述的使用方法享用 RSS 服务即可。
另外,除了在自己服务器上部署,RSSHub 还提供了 Heroku、Google App Engine 等多种部署方案,可以根据自己的喜好选择。