为Trilium博客实现RSS订阅功能

前言

RSS 是一个博客必不可少的功能,但不像 hexo、typecho 等博客框架安装一个插件就能实现 RSS 订阅源,但我所开发的基于 Trilium 的博客方案(详见: 全新的博客发布体验 - 基于Trilium实现完美的博客发布方案)则没有现成的插件供我使用,于是只能自己开搞。

查阅资料后发现RSSHub能实现自定义订阅源的功能,下文就基于 RSSHub 创建 RSS 订阅源展开叙述。

RSSHub 是什么

官网介绍:

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

可见 RSSHub 可以将任意网页通过 HTML 解析的方式,生成符合 RSS 标准的 XML 文件。

实现

安装 RSSHub

因为我们需要自己制作一个 RSS 订阅源,所以需要下载源码修改:

git clone https://github.com/DIYgod/RSSHub.git
cd RSSHub
npm install
npm start

此时依赖安装正确的话,通过localhost:1200可以访问 RSSHub 的界面:

定义路由

阅读官方文档,可知/lib/router.js文件中定义了所有路由,我们可以在其中加入自己定义的路由:

router.get('/feed', lazyloadRouteHandler('./routes/ankia/blogs'));

这意味着当我通过域名:1200/fedd地址访问时,对应到./routes/ankia/blogs.js的规则。

 

制作一个 RSS 源

浏览routes中的自带源发现,制作 RSS 源的流程很简单,就是请求给定的网址,解析 html 文本,提取出 RSS 需要的信息即可。

以下是本站的 RSS 源示例:

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

module.exports = async (ctx) => {
    const currentUrl = 'https://www.ankia.top';

    const response = await got(currentUrl);

    const $ = cheerio.load(response.data);
    const $articles = $('#blogItems');
    const items = $articles
        .map((_, el) => {
            const title = $(el).find('#blogItemTitle').text().trim();
            const link = $(el).find('a').attr('href');
            const postDate = $(el).find('#blogPostDate').attr("blogpostdate");
            const pubDate = timezone(new Date(postDate), +8);
            const description = $(el).find('#blogItemSummary').text().trim();
            return {
                title,
                description,
                link,
                pubDate,
            };
        })
        .toArray();

    ctx.state.data = {
        title: '东东的小黑盒',
        link: currentUrl,
        item: items,
    };
};

配置RSS模板

/lib/views/rss.art 中可以定义RSS模板的样式,这里我进行了如下更改:

<webMaster>[email protected] (DIYgod)</webMaster> 改为 <webMaster>[email protected]</webMaster>

代理到主域名

此时,通过ip:1200/feed已经能够访问本站的 feed 地址了,但显然这样的 feed 地址不够美观,接下来在 caddy2 中的代理规则中加入一行:

  reverse_proxy /feed localhost:1200

将主域名在/feed地址上的访问代理到localhost:1200/feed 上,这样就可以用主域名/feed的方式访问 feed 地址啦。

设置开机自启

开机自启是各个服务必须配置的流程了,pm2 是一款开源的 Nodejs 进程管理器,可以方便的实现自动启动,先进行下载:

npm install pm2 -g

使用 pm2 运行 RSSHub:

pm2 start lib/index.js

保存当前运行的进程,并且注册到系统启动项:

pm2 save
pm2 startup

结语

目前已经可以在小站主页获取 RSS 地址,欢迎订阅~


参考资料:

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录