logo一言堂

AirSS: 超轻量RSS阅读器

去年我有一篇博文介绍了RSS在博客的应用。博客不是微信公众号,有现成的平台可以方便订阅。你当然可以把我的博客加在浏览器书签里,时不时点一下。但个人博客更新时间不定,可能一两天,可能一两个月,所以读者主动点进来效率很低。假如你想追踪十个,二十个,甚至上百个个人博主呢?那必须有更好的方法。通过RSS,读者可以把众多的个人博客汇集在一个界面,随时更新,方便阅读。

RSS阅读器有很多,但AirSS 别具一格:

  • 它是网页App,无需任何安装软件
  • 它是纯前端应用,没有任何费用或使用限制,无需担心隐私泄漏
  • 它是自由软件,代码开放
  • 它是我写的

超轻量界面

frontpage
frontpage

我只实现了我自己需要的最简功能集合,所以它的界面非常简洁。你点击AirSS进去,会看见如下界面:

只有四个按钮:扳手(配置对话框),奶瓶(订阅对话框),左右箭头,没了。

订阅对话框

subscribe
subscribe

订阅对话框也很简单:只有一个文本框输入博客主页地址或RSS地址,没了。

配置对话框

config
config

配置对话框稍微复杂一点点:前三项不言而喻,后两项我下文会详细描述。假如你点击奶瓶,输入我博客地址订阅我的博客,它会在后台自动下载我的最新博文简介。然后,你就可以用左右箭头来翻页,随意阅读了。你可以订阅任意多的博客,保存任意多的文章,而且从你的电脑到博主的服务器,中间没有任何中间人,没有任何人能知道你读过什么,喜欢什么,不喜欢什么。我的阅读我做主!而且,我不打算实现搜索,收藏之类的功能:这些功能可以通过别的工具实现。AirSS负责订阅下载,仅此而已。我每天打开它浏览今天收到的文章,大多数只是大致扫一下,少部分仔细阅读,甚至吐槽,总共花不到半小时。

注意有坑

如果你感兴趣,愿意使用,很快你就会发现:绝大多数的博客都不能用! 这不是坑人吗?我只能一脸无辜地说,真的不是我的错,是这个世界的错啊!下面介绍一个概念:跨域共享 (CORS: Cross Origin Resource Sharing)

我前面介绍过,AirSS是纯前端App,你和博客之间没有中间人。但是问题来了:目前浏览器为保护你的隐私,在缺省情况下不允许网站A的前端跨域访问网站B的资源,除非网站B对网站A有授权。浏览器是好意,想保护你的隐私:比如你在网站B上免密码登录看邮件,网站A去读你的邮件咋办?但是,AirSS恰恰在做跨域访问,而且这个应用没有任何隐私泄漏问题:

  • 博客本来就是向公众开放的共享资源
  • AirSS连后台都没有,拿到的所有信息也就是给你自己看

为什么我的博客可以用呢?原因很简单:我设置了授权给所有人共享。别人没这么设置原因不外乎几点:懒,不会,或者不能。我们对抗不了整个世界,所以这个坑就只能忍着。好在坑可以绕过去。

绕坑CORS

下面我介绍三种主流浏览器绕坑方法。绕过之后,大多数博客就能自如订阅了。

Firefox

CORS Everywhere
CORS Everywhere

下载安装浏览器插件CORS Everywhere. 然后进去配置CORS Everywhere, 把AirSS加入白名单:

注意这个正则表达式不要写错了。

Chrome

Chrome里关于CORS的插件很多,但我看了好几个,没有一个有合理的白名单功能。例如这个:Allow CORS

用法很简单,点亮即可。问题在于点亮后对所有网站CORS保护都撤了。不用AirSS的时候还是关了安全一点。

Safari

Safari没有什么插件好装。但可以用如下方法,无需安装插件:

  1. 在Preferences -> Advanced 打开 Develop Menu
  2. 在Develop Menu里勾选 Disable Cross-Origin Restrictions

当然,这样的后果是对所有网站CORS保护都撤了。不用AirSS的时候还是关了安全一点。

Airtable

这个功能有点高阶,但我承诺过要交代AirSS配置界面最后两项。先交代要解决的问题:AirSS是纯前端应用,没有后端。这保证了隐私和速度,但后果是数据没有云端备份。通常人们有不止一个设备,如果没有后端的话,这多个设备不能同步,例如你电脑上和手机上看到的是完全两份,这显然不能让人满意。

Airtable 是一个网上应用,它提供傻瓜型数据库。AirSS可以和 Airtable 沟通,在云端保存数据。所以说,AirSS自己没有后端,但用户可以自己带来自己的后端。这虽然貌似违背AirSS的初衷,但第一,它不是中间人,只是一个数据旁路,第二,它属于用户自己,或者属于Airtable,反正不属于我。最后,如果你真的对Airtable的隐私保护有疑虑,也可以不用这个功能。如果你想用的话,请继续阅读。

首先,你需要在Airtable注册一个用户。初阶是免费的,AirSS的使用基本可以被免费初阶覆盖。

然后,你需要在Airtable上建立AirSS需要的数据库。请点击AirSS 模版. 进去之后屏幕右上角有一个 copy base 的链接,点进去后就把这个模版安装到你的账户里了。

最后,你需要从Airtable中获取你的API Key,和Base ID. API Key请点击Airtable里你头像,选Account. 在这里可以生成,注销,拷贝你的API Key。Base ID请点击这个Base,然后点Help(右上),选API documentaion。第一页里就有。API Key是形如key...的字符串,Base ID是形如app...的字符串。请把这两个字符串剪贴到AirSS的配置页相应输入框里。

Airtable初阶服务限制到最多1200个数据条目。AirSS里每个RSS订阅,及每个收到的文章各占一个条目。假如你有不超过200个订阅,则文章不超过一千的话你是安全的。接近一千的时候请注意删除,以免受Airtable限制。

最后,使用Airtable同步后,手机阅读会方便不少。前文所述,AirSS受CORS限制。电脑上可以用插件等绕坑,但手机上恐怕困难。我在手机上压根没有试图绕坑。我的方法是在电脑上尽可能多提前下载,把设置页第一项设到最大。而在手机上这项设成0. 这样在手机上就不会主动去下载。 这样的结果是每天只要在电脑上打开AirSS,它就会在后台下载文章简介,然后上传到Airtable。而你手机就只需要从Airtable上同步,而无需从原始网站下载,从而触发CORS限制。

简单绕坑方法

Load feeds with roastidio.us
Load feeds with roastidio.us

我之前介绍的绕坑方法对于大多数人恐怕还是太复杂一点了。既然吐槽俱乐部 也是我办的,所以我利用吐槽俱乐部的后端做了一个服务以便于AirSS 前端不需要掉进 CORS 的坑里也能自如加载各种 RSS 资源。你只需要确保在同一个浏览器里你在吐槽俱乐部是登录状态 (Cookie 有效期30天),然后在AirSS配置页里勾选 Load feeds with roastidio.us 则一切都会畅通:

当然,这样会慢一点,毕竟所有资源会到吐槽俱乐部的后端兜一圈。为防止被别人滥用,目前这个功能只对吐槽俱乐部的注册用户开放;吐槽俱乐部 的注册对所有人开放,免费,只需要一个邮箱地址即可。

结束语

AirSS的源代码 在Github上,有兴趣的朋友可以参考。欢迎多提宝贵意见,或者发Pull Request. 这个应用并不复杂,和一些主流应用比起来,也不是那么方便。但我的原则很简单:在不牺牲隐私的前提下尽可能提供方便。相比起来,现在很多应用其实是为了方便不惜牺牲隐私,甚至是用方便做诱饵来骗取你的隐私。请慎重选择。

你还在等什么?快来用 AirSS发现原创内容吧 !