尝试自制了一个rss阅读器,现在还在开发中。

2022/2/7更新:暂时放弃了,互联网上还有可用的rss订阅方案

想法

Rss:简单信息聚合。

互联网使我们得以接触到广泛的信息,而我们往往希望自己关注的创作者(某个网站)有更新时,自己能第一个被通知。Rss便是为此而生。

Rss的概念其实很简单。它的使用过程大致如下

  • 创作者使用工具生成一个xml格式的feed。
  • Rss订阅工具(一般是第三方提供)获取这些feed后解析其内容并生成易于阅读的内容,随后通知订阅者内容已经更新。
  • 订阅者得到阅读器提供的清单选择自己感兴趣的内容阅读。

这个过程看起来简单,但这中间又有以下几个问题:

  • 创作者不一定会提供feed。
  • Rss订阅工具一般由第三方的企业实现,它们会像爬虫一样(或者说就是爬虫)定时获取网站的feed。而使用服务器是有成本的。
  • 对订阅者的要求,订阅者需要将自己希望阅读的内容加入到订阅工具中。而获取feed对于很多订阅者来说是个难题。当然,浏览器插件一定程度上能解决一部分这个问题。
  • 阅读器的颜值,可能是因为rss凉了很久了,现在遗留下来的阅读器的ui都是一言难尽。
  • 阅读器的跨平台,移动设备近几年才普及开来,而rss在此之前就凉了。因此很少有好的rss跨平台解决方案。

综上,我希望能有一款产品能完美完成我的Rss订阅问题。为何我要如此执着于Rss呢?

  • Rss意味着我可以自己选择要看什么,不看什么,而不是被现代的推荐机制牵着鼻子走。
  • Rss意味着我可以第一时间得到更新,而不是等到有人推送,或是选择性的推送,抑或是干脆得不到通知。
  • 好的Rss阅读工具意味着我可以舒服的阅读我想要阅读的内容,甚至可以让内容经过进一步处理后再阅读
  • 好的Rss阅读工具意味着我可以随时随地收到更新,并且在任意设备上进行阅读。

实现

接下来讨论下具体的实现。

订阅源

关于订阅源,RssHub项目提供了不少有趣的订阅源。

然后是对于一些不直接提供feed的网站,例如我想订阅B站某位up主的更新。irreader提供了一种不错的思路。让用户手动选择自己想要订阅的区块后,通过网页规则的匹配生成一个订阅规则(像是一种非xml格式的feed)。

订阅器

这里的订阅器指定时获取feed的工具。前面提到了部署服务器软件来定时获取feed的做法,除了服务器端的软件外,在用户本地进行同步也是一种办法。

关于定时获取feed,当然原则上是越频繁越好啦,但也不能使劲的访问,搞成压力测试了。所以关于更新的频率,可以用算法优化优化。

然后就是feed的判定,订阅器应当有能力判断获取的feed中是否有更新内容,以往的内容是否失效,哪些内容应当被加入数据库,哪些应当从数据库中去除。

阅读器

说到阅读,途径就多种多样了,随手枚举一下:网页,win客户端,linux客户端,Android客户端,iPhone客户端,各种平板,微信小程序。

阅读的方式也有讲究,可以让用户打开链接(调用本地浏览器),或为用户提供一个阅读器,或是其他方式。

一种方案

尝试提出一种方案来完成上述所有内容。

向用户提供:

  • 各种格式的阅读器,包括网页端和微信小程序(写写前端),桌面客户端及平板客户端(qt跨平台完事),手机客户端(qt好像可以跨Android和ios)。

  • 订阅工具,与阅读器集成,支持

    • 与RssHub接入
    • 添加自定义feed
    • 添加自定义非feed源

在服务端(不是服务器端)提供:

  • feed获取工具,分为两类:
    • 服务器端:记录用户的订阅要求后添加至数据库,获得新feed与旧feed对比后写入数据库
    • 本地端:支持手动或定时获取feed,以本地方式保存数据
  • feed解析工具,将feed解析为:
    • 链接:用户可通过自己的浏览器阅读源内容
    • 内容:获取feed中的文本后,解析为便于阅读的格式,交由阅读器供用户阅读