Live Space

The Mercury: A web-based RSS feeder

• 来自廉价轮子部门

六月初的时候突发奇想想做一个可以自由地在自己服务器上托管的、基于 web 的 RSS feeder,这样可以方便地将自己想要订阅的博客聚合在一起来集中阅读,而不用单独访问每一个博客。于是在网上查找源码,发现了一个古老的项目 The Planet,但是上一次更新已经是近十年前的事情了,部署起来也很麻烦。于是决定自己做一个有类似功能的玩具。

于是 The Mercury 就这样诞生了。因为 Mercury 是一个星球,和 Planet 很像。它现在的工作是这样的:

  • 每天在我可能醒着的时候,每隔一个小时抓取我所订阅的网站的 RSS,筛选出最近 30 天内的更新。
  • 审查页面中的不安全元素,不显示不安全的内容,防止多重内容混合。
  • 修复相对路径,使得相对路径引用能够显示正确的内容,并且让所有的链接都在新窗口打开。

本来是准备使用 tornado 做的,后来发现似乎专门为这个阅读器跑一个 Web server 有些多余。因为服务器不可能每时每刻都抓取目标订阅源的信息,而在空闲阶段,页面的内容是固定的。倒不如定时抓取并且生成一个静态的页面,我只需要访问这样一个静态的页面就可以了。最后决定使用 feedparser 来抓取目标订阅源,用 schedule 来定时控制抓取与生成过程,用 BeautifulSoup 来审查页面,用 yaml 来对行为进行配置,用 jinja2 来渲染页面。

大概就是这么样一个小轮子,现在它已经正常工作许久。我还为它专门写了一个小小的页面风格。地址是 https://mercury.roychan.org,你可以在 GitHub 上看到它的源代码。

不得不感叹 Python 第三方包很多,确实很方便。下一步就是给我的 Magicodar 加上 RSS 订阅功能。