时隔两年半,再次给RSSHub提PR(上次PR的记录传送门

TonyRL老师PR Merge的很快,代码是下午完成的,PR是晚上合并的😘

feat(route): add route for DuckDB news

代码架构变动

具体看DIYGod本人的博客,这里不过多赘述:一个六岁开源项目的崩溃与新生

我关注的就三个点:语言JS -> TS,框架Koa ->Hono,网络请求还没想好要不要替换Got

但也谈不上有多关注😅,就JS语言的迭代速度而言,怕不是永远都在学习新框架,新语法的路上。框架太多,语法太杂,没必要为了赶时髦,学些老工具就能解决的不错的问题。

但作为开发者而言,我十分乐见本次改动:我只添加了两个文件(命名空间和一个路由),就完成了RSS的输出与文档的生成

文档的例子不错,很容易理解路由编写规则,看一下手册和别人提交的PR,就能自己实现代码。

提交commit的时候,也不再像之前一样,强制ESLint扫描所有文件,这就很舒服(三年前一个commit转了3分钟,让我第一次接触了pre-commit这种东西😂)

代码调试

如果非要吐槽点什么的话,就是RSSHub代码调试不太方便😐

我自己是Jquery语法有点遗忘,就得不断尝试Cheerio抓取,这部分内容就需要自己搭建个运行环境进行测试:

pnpm install cheerio
pnpm install got

参考手册内容(Pure ESM package)开启ESM支持

这里贴一下用于调试测试的代码:

import got from 'got';
import { load } from 'cheerio';

const baseUrl = 'https://duckdb.org/news/';
const response = await got(baseUrl);
const $ = load(response.body);

const list = $('.postpreview')
.toArray()
.map((item) => {
    item = $(item);
    return {
        title: item.find('h3').text().trim(),
        link: `https://duckdb.org${item.find('a').eq(2).attr('href')}`,
    };
});

{
    const response = await got(list[1].link);
    const $ = load(response.body);
    console.log($('.author').text())
    console.log($('.singleentry').html())
}

我对DuckDB信息源做了获取全文操作的操作,结果调试的时候始终不显示全文信息,我以为是缓存的问题,四处翻找文档没找到答案😅而对于RSSHub的缓存,我还没想到没个好的解决方案

后面测试的时候才发现是Body没解析,补了个commit才解决

个人想法

这次PR编写于提交虽然有点小磕绊,但总体而言,相比较于第一次提交PR而言顺利不少

我个人是非常喜欢RSS订阅这种模式的,目前使用FreshRSS的作为主要的阅读器。但我们学校更喜欢第一时间发微信信息与QQ信息😅,RSS订阅的最大作用反倒是让信息归档更加方便些。

最后,RSSHub陪我度过了四年的本科生活,这里衷心祝愿RSSHub项目发展顺利🧐