2024-02-25 RSS 使用的最佳实践 RSSHub+FluentReader+FreshRSS

参考链接:

RSS 简介:www.runoob.com/rss/rss-int...

RSSHub:docs.rsshub.app/

Fluent Reader:github.com/yang991178/...

FreshRSS:github.com/FreshRSS/Fr...

重新捡起 RSS:RSSHub + FreshRSS 建立我的信息流:blog.l3zc.com/2023/07/rss...

前言

最近一段时间研究了下 RSS 的最佳实践,经过一番探究,得出了 RSSHub + Fluent Reader + FreshRSS 的最佳组合,现记录一下使用流程。

本文应该是全网最全面的 RSS 使用实践了,如果给你带来了一些收获,不甚荣幸。

你真的需要 RSS 吗?

或许,你在某些文章中会看到,文章作者对 RSS 夸的天花乱坠,似乎 RSS 就是无所不能,RSS 就是银弹。

但实质上,RSS 也就是种信息传播格式,未必适合每个人,RSS 不是万能的银弹。

来做个简单的小测验,这是RSSHub的官网:docs.rsshub.app/

  • 如果你可以正常访问 RSSHub,那么你可能会需要 RSS
  • 如果你无法(通过一些方式)访问 RSSHub,那么你多半不需要 RSS。
  • 如果你实在搞不清楚的话,那么你必然不需要 RSS。

在搞明白你是否需要 RSS 之后,再接着往下看吧。

RSS 是什么

在开始使用 RSS 之前,先需要知道 RSS 是什么。

RSS,全称 Really Simple Syndication,即"简易信息聚合",是一种 XML 的内容格式。

一个标准的 RSS 例子如下:

xml 复制代码
<rss version="2.0">
	<channel>
		<title>网站标题</title>
		<link>网站首页地址</link>
		<description>描述</description>
		<copyright>授权信息</copyright>
		<language>使用的语言(zh-cn表示简体中文)</language>
		<pubDate>发布的时间</pubDate>
		<lastBuildDate>最后更新的时间</lastBuildDate>
		<generator>生成器</generator>
		<item>
			<title>标题</title>
			<link>链接地址</link>
			<description>内容简要描述</description>
			<pubDate>发布时间</pubDate>
			<category>所属目录</category>
			<author>作者</author>
		</item>
	</channel>
</rss>

RSS 有什么用

这是个好问题,也是你在开始折腾 RSS 前需要搞清楚的事情。

以一言盖之,RSS 订阅的本质就是种信息获取渠道,与微信公众号、博客、微博等一样,都是让你来获取信息的。

只是 ,RSS 订阅 允许你自己来主动获取你想要的信息,而排除一切你不想要的信息。

在这个充满了大数据推送的时代,RSS 订阅是化被动为主动的信息获取方式,让你的信息接收完全被自己掌控!

BitTorrent 资源网站大多也提供 RSS 订阅,可以添加到 BT 下载软件中订阅,实现自动下载资源。

RSS 如何订阅

在知道了 RSS 有什么用之后,接下来就得找 RSS 订阅源了。

1.网站自行提供

有些网站会自己提供 RSS 订阅源,例如 GitHub少数派等,大部分自建的博客也会提供 RSS 订阅源,例如 阮一峰的网络日志草梅友仁的博客等。

2.RSSHub 订阅

但对于大部分(国内的)网站来说,提供 RSS 订阅服务是没有必要的,所以基本上不提供 RSS 订阅服务。

在这里,就需要靠 RSSHub 来实现 RSS 订阅了。

RSSHub:docs.rsshub.app/

RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以给任何奇奇怪怪的内容生成 RSS 订阅源。

以 B 站为例。

例如我希望订阅 bilibili 上一个名为 草梅友仁的 up 主的动态。

根据 UP 主动态 的文档,路由为 /bilibili/user/dynamic/:uid/:routeParams?

:uid替换为 草梅友仁的 uid: 10822025,得到路径为 /bilibili/user/dynamic/10822025

再加上域名 https://rsshub.app,于是就获得了一个订阅源:https://rsshub.app/bilibili/user/dynamic/10822025

基于相同的方法,你还可以得到以下 RSS 订阅源。

由于官方提供的域名仅供 demo,可用性不高,会因为反爬虫等原因失效,所以一般考虑自建来增强可用性(也增加了可自定义的部分),下面来讲一下这部分内容。

RSSHub 部署

在 RSSHub 的官方文档中,就已经对如何部署进行了详细描述:docs.rsshub.app/zh/install

我个人最推荐的是通过 Docker Compose 部署。

1.通过 Docker Compose 部署

首先确保服务器上安装了 Docker 和 Docker Compose。

然后在合适的位置创建docker-compose.yml文件,内容参考如下:

yml 复制代码
version: '3.9'

services:
    rsshub:
        image: diygod/rsshub
        restart: always
        ports:
            - '1200:1200'
        environment:
            NODE_ENV: production
            CACHE_TYPE: redis
            REDIS_URL: 'redis://redis:6379/'
        depends_on:
            - redis
            
    redis:
        image: redis:alpine
        restart: always
        volumes:
            - redis-data:/data
            
volumes:
    redis-data:

然后就可以使用以下命令启动了:

sh 复制代码
docker-compose up -d

然后可以通过访问 http://[服务器IP]:1200来判断启动是否成功。(在此之前,记得开放服务器的 1200 端口)

如果是在本地部署的话则访问 http://127.0.0.1:1200 即可。

停止

sh 复制代码
docker-compose down

如何同步最新的 Docker 镜像?

可以考虑通过增加镜像 Tag 来指定具体的镜像版本,例如:diygod/rsshub:2024-02-22。

也可以考虑使用同步更新的 Docker 源,例如:dockerproxy.com

2.通过 npm 包使用

也许你还想过通过云函数(阿里云/腾讯云等)来调用,可以考虑将 RSSHub 作为 npm 包来使用,参考代码如下:

js 复制代码
const RSSHub = require('rsshub');

RSSHub.init({
    // config
});

RSSHub.request('/bilibili/user/dynamic/10822025')
    .then((data) => {
        console.log(data);
    })
    .catch((e) => {
        console.log(e);
    });

这种使用方法比较冷门,在更新上也有些不便。但如果你需要的话,这也是一种选择。

3.解决图片代理问题

提示:你可以在安装完 RSS 阅读器后再来处理这个问题

在使用 RSS 阅读器的过程中,你可能会遇到图片加载不出来的问题,例如来自微博的图片就会因为跨域而被禁止加载。

此时就需要添加图片代理。

有关图片外链的解决方案可参考该文章:2023-10-14-免费图床之微博外链图片解决方案

这里以image.baidu.com为例。

以 RSSHub 为例,参考图片处理一栏中的方法,可以在 docker-compose.yml 进行如下配置。

yml 复制代码
HOTLINK_TEMPLATE: 'https://image.baidu.com/search/down?url=$${href_ue}'
HOTLINK_INCLUDE_PATHS: /weibo

这样就可以正常加载了。

实际的图片地址会变成:https://image.baidu.com/search/down?url=https%3A%2F%2Ftvax1.sinaimg.cn%2Flarge%2F008dLuZOgy1hn4knw0yq4j31c82141kx.jpg,从而规避微博图片的跨域限制

在使用 RSSHub 的过程中,你可能会遇到一些需要自建并提供 Cookie 的路由,例如 用户关注动态

查阅文档可了解相关配置。

不过这时往往也会遇到个问题,那就是 Cookie 失效问题。

B 站的 Cookie 每隔一段时间会自动刷新,此时就失效了。

下面以 B 站为例介绍两个方法

方法一:在浏览器无痕模式(隐身模式)下登录后获取相应的 Cookie。因为用户通过浏览器访问才会触发 Cookie 刷新,所以可以用该方法规避。

方法二 :使用 CookieCloud 同步 Cookie。

受限于篇幅原因,此处就不再赘述如何部署 CookieCloud 了,主要来说下怎么用。

在浏览器端设置了要同步的域名后,就可以通过 CookieCloud 的接口来获取到 Cookie 了。

以下是一个简单的 python 脚本,会在根目录生成 .env 文件,此时就可以被 Docker 读取到环境变量,也就解决了 Cookie 问题 。

不过在实际使用中也会遇到 Cookie 更新了,但 RSSHub 这边没有同步更新 Cookie 的问题。

因为 RSSHub 只在启动的时候读取环境变量,所以需要定期重启以同步 Cookie 。

python 复制代码
import urllib
import requests
import json
import urllib.parse

# 环境变量;域名
cookie_map = {
    "BILIBILI_COOKIE_114514": "bilibili.com",
    "WEIBO_COOKIES": "weibo.cn"
}

def get_cloud_cookie():
    url = "https://localhost:8088/get/aaaaaaaaaaaaaa"
    payload = json.dumps(
        {"password": "xxxxxxxxxxxxxxx"}
    )
    headers = {"Content-Type": "application/json"}
    response = requests.request("POST", url, headers=headers, data=payload)
    return json.loads(response.text)

def encode_cookie(text):
    return urllib.parse.quote_plus(text)

def serialize_cookie(cookie):
    str = f"{encode_cookie(cookie['name'])}={encode_cookie(cookie['value'])}"
    return str

if __name__ == "__main__":
    data = get_cloud_cookie()
    env = ""
    for key, value in cookie_map.items():
        cookies = data["cookie_data"][value]
        cookie_str = "; ".join([serialize_cookie(c) for c in cookies])
        env_str = f'{key}="{cookie_str}"\n'
        env += env_str

    env = env.strip()
    with open(".env", "w", encoding="utf-8") as f:
        f.write(env)

RSS 如何阅读

在解决了 RSS 订阅源的问题之后,我们将面临下一个问题:如何阅读 RSS?

很显然的是,原始的 xml 格式的文本,并不适合人类阅读,所以需要一个阅读器来美化内容。

桌面端

幸运的是,市面上已经有很多 RSS 阅读器了,在这里我推荐的是 Fluent Reader,一个开源的、美观的 RSS 阅读器(也支持中文)。

前往 releases 页面下载最新版本的安装包即可,按自己的操作系统来下载,Windows 用户下载 .exe后缀的安装包。

在安装完成后,即可进入软件查看。

默认情况下,Fluent Reader 里面什么都没有,需要自己手动添加 RSS 订阅源。

点击右上角的设置按钮

然后输入一个 RSS 订阅源,例如:blog.cmyr.ltd/atom.xml

然后再回到主页面,就可以看到订阅的内容了。

基于同样的方式,可以将之前 RSSHub 的那些订阅源都添加进去。

手机端

手机端这里推荐的是同个作者的 Fluent Reader Lite

同样前往 releases 页面下载最新版本的安装包即可。

如果想支持下作者的话也可以通过 Google PlayApp Store 安装,需要支付 1.99 美元作为费用。

在进入软件后,默认也是没有任何 RSS 订阅源的,需要自己手动添加。

并且和电脑端不同的是,甚至没有给你一个手动添加订阅源的地方,因此,需要一个 RSS 订阅服务。

FreshRSS 部署

如果说 RSSHub 提供了 RSS 源的话,那么 FreshRSS 就是负责订阅这些 RSS 源的。

1.通过 Docker Compose 部署

关于部署方式,推荐通过 Docker Compose 部署

yml 复制代码
version: '3'
services:
  freshrss:
    image: freshrss/freshrss
    container_name: freshrss
    restart:  always
    ports:
      - "8080:80"
    environment:
      TZ: 'Asia/Shanghai'
      CRON_MIN: 1,31
    volumes:
      - freshrss_data:/var/www/FreshRSS/data
      - freshrss_extensions:/var/www/FreshRSS/extensions
volumes:
  freshrss_data:
  freshrss_extensions:

然后就可以通过 8080 端口来访问了,建议改成自己喜欢的端口。

进去之后的第一步就是选择语言了,这里选择简体中文即可。

步骤二是检查环境,通过 Docker Compose 部署的一般不存在环境问题,直接点击下一步即可。

第三步是数据库配置,选默认的 SQLite 即可,如有需要可以选其他数据库。

第四步就是配置管理员账号了,自己配置即可。

然后就大功告成了!

之后就会跳转到登录页面,登录即可。

在首页里,默认只有 FreshRSS releases 这一个订阅源,可以考虑删除。

之后就可以自己添加 RSS 订阅源了!

2.启用 API 访问

点击右上角进入配置页面

认证页面中启用允许 API 访问 (用于手机应用)

然后再回到账户页面,设置API 密码

然后就可以点击下方的http://localhost:40201/api/来检测 API 状态,两个都为 PASS 即为成功。

3.配置 Google Reader compatible API

在这里要说明下为什么不配置Fever compatible API,原因是经过实测,Fluent Reader 和 Fluent Reader Lite 都无法正常配置Fever compatible API(虽然提供了相关的配置项),所以这里就选择经过实测可行的 Google Reader compatible API

Fluent Reader 配置

Google Reader API中,端点就设置为上文中的http://localhost:40201/api/greader.php,注意,域名(或 IP)和端口需要根据你自己的配置改动。

用户名则是你的账号名称。

密码是API 密码,不是账号的密码!!

同步数量自行选择。

随后可以在 分组与排序中导入分组,这样就可以和服务端同步订阅源与分组(默认情况下分组不会同步)

至此就完成了桌面端的配置

Fluent Reader Lite

手机端也是类似的配置,此处不再赘述。

至此,我们就实现了 RSS 从订阅源、到同步、到阅读的全流程,尽情的体验 RSS 带来的全新信息流吧!

发现 RSS

好像还有一个问题,那就是我要怎么知道一个网站是否提供了 RSS 呢?或者说,我要怎么知道 RSSHub 是否提供了某个网站的 RSS 呢?

答案是通过 RSSHub Radar

通过在设置中配置 自定义 RSSHub 域名一键订阅,就可以实现这样的效果,这样一来,订阅 RSS 就方便很多了。

RSS 下载

对于支持 BitTorrent/磁力链接的 RSS 订阅源,只要使用支持 BitTorrent/磁力订阅源的 BitTorrent 客户端即可,例如 qBittorrent 等。

建议使用迅雷以外的任何主流的开源 BitTorrent 客户端,反吸血人人有责。

RSS 推送

TODO

实际上,在目前的 RSS 相关应用中,还缺少一类应用,那就是 RSS 推送,即把更新的 RSS 消息推送到某个消息渠道,例如微信、钉钉、邮件等。

虽然已经有 rsspush 在前了,但该软件和 Server 酱 强绑定,也没有和 FreshRSS 等 RSS 订阅服务联动。虽然能用,但没有达到笔者理想中的程度。

如果对 RSS 推送有需求的,可以尝试一下 rsspush。

总结

使用 RSS 是件麻烦事,只有少数愿意折腾的人才会去干这件事。

如果你也愿意为之折腾,那就说明你也有颗不安分的心。

愿你在这充满大数据推送的时代,能有受自己掌控自己的信息流。

本文作者:草梅友仁 本文地址:blog.cmyr.ltd/archives/49... 版权声明:转载请注明出处!

相关推荐
奥顺3 小时前
PHPUnit使用指南:编写高效的单元测试
大数据·mysql·开源·php
是小崔啊3 小时前
开源轮子 - Apache Common
java·开源·apache
FIT2CLOUD飞致云4 小时前
喜报丨重大科技成就发布会上,JumpServer入选2024年度开源项目!
开源
玖疯子4 小时前
如何详细地遵循RustDesk的步骤来搭建远程访问和自定义服务器?
github
刘不二5 小时前
大模型应用—HivisionIDPhotos 证件照在线制作!支持离线、换装、美颜等
人工智能·开源
小华同学ai5 小时前
ShowDoc:Star12.3k,福利项目,个人小团队的在线文档“简单、易用、轻量化”还专门针对API文档、技术文档做了优化
前端·程序员·github
小奏技术9 小时前
我用github新开源的3D图生成工具生成了自己github历史贡献3D图
后端·开源
loop lee17 小时前
Nginx - 负载均衡及其配置(Balance)
java·开发语言·github
奥顺1 天前
PHP与AJAX:实现动态网页的完美结合
大数据·mysql·开源·php