打造完美的rss方案(一):器

12,662 阅读3分钟

前言

本文分为两篇文章。本篇讲原理,下一篇讲详细搭建步骤。

适用人群:编程基础 >= 初级。

背景

早年,我使用rss的方式是:feedly、inoreader。但是收费,且可订阅的源有限,像即刻、知乎feed没法订阅。

后来发现了rsshub,万物皆可rss,打开了新世界的大门。

然而好景不长,没过多久,rss阅读器、rsshub纷纷被蔷:

虽然科学上网可以解决问题,但是多一个步骤就会严重影响体验。

在查阅资料后,终于摸索出一套「完美」的解决方案。

预期

在手机、pc上,不科学上网,就能拉取和阅读我想要的rss源,且免费或廉价。

解决方案

概述

由 阅读器 + rss服务 + rss生成器 + rss探测器 组成:

fluent reader(免费跨端阅读器)+

freshrss(用于管理订阅源及暴露fever api供阅读器使用)+

rsshub(用于生成订阅源)+

rsshub radar(用于嗅探订阅源,以及一键录入到freshrss)

为了避免蔷,rss服务、rss生成器需要独立部署。

下面分别介绍一下各part。

fluent reader -- 阅读器

一款开源的跨端(移动+桌面)rss阅读器,不收集个人数据。

它提供了服务模式,即把订阅源交给外部服务管理,自身作为一个阅读器及外部服务的代理。

我选择了「fever api」服务模式,只要对应的服务实现了fever api,就可以使用,比如freshrsstiny tiny rss

进入软件后,会通过服务提供的fever api拉取订阅源。当点击开始阅读文章时,也会通过fever api发送请求,在外部服务端将文章标注为已读,这样不管在桌面还是手机,都可以获取到相同的阅读状态。

freshrss -- rss管理服务

一款开源的rss源管理软件,支持多用户、分类、打标签,以及丰富的订阅配置,比如数据清理配置。

最重要的是提供了fever api、google reader compatible api,让支持这些api的阅读器可以方便代理。

rsshub -- rss集散地

一个开源易扩展的rss生成器,简单来说:让万物皆可rss。

对于读者来说,它是一个rss集散地。

对于开发者来说,它本质上是一个爬虫路由及解析服务。开发者可以通过got、cheerio等库,来抓取网页数据,交由rsshub生成rss源。

从一个爬虫例子可见一斑:

const got = require('@/utils/got');

module.exports = async (ctx) => {
    const response = await got({
        method: 'get',
        url: `https://app.blockmeta.com/w1/news/list?num=30&cat_id=4481&page=1`,
        headers: {
            from: 'web',
            Referer: `https://www.8btc.com/flash`,
        },
    });

    const newsflashes = response.data.list;

    let newsflashesList = [];
    for (let i = 0; i < newsflashes.length; i++) {
        newsflashesList = newsflashesList.concat(newsflashes[i]);
    }

    const out = newsflashesList.map((item) => {
        const pubDate = item.post_date_format;
        const link = item.source.link;
        const title = item.title;
        const description = item.content;

        const single = {
            title,
            link,
            pubDate,
            description,
        };

        return single;
    });

    ctx.state.data = {
        title: `快讯 - 巴比特`,
        link: `https://www.8btc.com/flash`,
        item: out,
    };
};

rsshub radar -- rss探测器

一款用于探测rss源的chrome插件。

比如你访问某个知乎用户的主页,rsshub radar会自动探测页面里的rss源,并且可以一键添加进freshrss:

connect them together!✨

不必再被限制:

其整体使用方式如下:

结语

本篇介绍了一种rss解决方案及其运行原理,旨在达成目标:在手机、pc上,不科学上网,就能拉取和阅读想要的rss源,且免费或廉价。

下篇文章将介绍:如何一步一步构建属于你自己的解决方案。