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

参考链接:

RSS 简介:https://www.runoob.com/rss/rss-intro.html

RSSHub:https://docs.rsshub.app/

Fluent Reader:https://github.com/yang991178/fluent-reader

FreshRSS:https://github.com/FreshRSS/FreshRSS

重新捡起 RSS:RSSHub + FreshRSS 建立我的信息流:https://blog.l3zc.com/2023/07/rsshub-freshrss-information-flow/

前言

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

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

你真的需要 RSS 吗?

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

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

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

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

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

RSS 是什么

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

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

一个标准的 RSS 例子如下:

<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:https://docs.rsshub.app/

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

image-20240225002244974

以 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 的官方文档中,就已经对如何部署进行了详细描述:https://docs.rsshub.app/zh/install

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

1.通过 Docker Compose 部署

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

然后在合适的位置创建docker-compose.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:

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

docker-compose up -d

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

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

停止

docker-compose down

如何同步最新的 Docker 镜像?

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

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

2.通过 npm 包使用

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

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 阅读器的过程中,你可能会遇到图片加载不出来的问题,例如来自微博的图片就会因为跨域而被禁止加载。

image-20240225012054331

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

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

这里以image.baidu.com为例。

以 RSSHub 为例,参考图片处理一栏中的方法,可以在 docker-compose.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,从而规避微博图片的跨域限制

4.解决 Cookie 问题

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

image-20240225172518519

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

image-20240225172547861

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

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

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

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

方法二:使用 CookieCloud 同步 Cookie。

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

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

image-20240225173224592

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

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

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

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 阅读器(也支持中文)。

image-20240225005621620

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

image-20240225005745346

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

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

点击右上角的设置按钮

image-20240225010604284

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

image-20240225010706988

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

image-20240225010830611

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

手机端

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

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

image-20240225011511695

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

image-20240225011641999

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

image-20240225011911167

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

FreshRSS 部署

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

1.通过 Docker Compose 部署

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

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 端口来访问了,建议改成自己喜欢的端口。

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

image-20240225014348892

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

image-20240225014432617

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

image-20240225014512247

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

image-20240225014613536

然后就大功告成了!

image-20240225014632634

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

image-20240225014703994

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

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

image-20240225014723352

2.启用 API 访问

点击右上角进入配置页面

image-20240225175329143

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

image-20240225175511317

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

image-20240225175626355

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

image-20240225175741094

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 密码,不是账号的密码!!

同步数量自行选择。

image-20240225180232076

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

image-20240225180543045

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

Fluent Reader Lite

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

image-20240225181116973

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

发现 RSS

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

答案是通过 RSSHub Radar

image-20240225181629402

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

image-20240225181743934

RSS 下载

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

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

image-20240225182435697

RSS 推送

TODO

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

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

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

总结

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容