##Google Reader之死
会想要重复造这么个轮子,当然还是因为Google Reader之死。Google也不知抽了什么风,也许是为Google Plus让步,也许是对未来方向的执着,也许是各种各样的原因,反正在众怒之下还是坚决关闭了Google Reader。看到“Thank you for stopping by”的那一刻,我真是有种从粉转黑的感觉。
真正开始用Google Reader应该是在2010年1月。从订阅像Matrix67,月光博客这些很有名的blog开始,逐渐的习惯了在Google Reader里阅读。订阅量也从几个十几个飞涨到了上百个,他去世之前,我订阅条目是200多,阅读了将近6w个条目。遥想当年,吃过晚饭后回到机房,首先就是打开GReader,不管其它先看到7点钟再去搞学习。这种晚饭后扫GReader的习惯陪伴了我很久,直到他去世。在他去世之后的很长一段时间里,我在晚饭后都是处于迷茫、空白状态。
他的去世,最让可惜的,我觉得还是这么多年来储存的无数数据。想当年微薄还没有流行,blog还很红火的时候,好的文章也是层出不穷。这么多年过去,难免很多blog因为各种各样的原因不存在了。有GReader可以很方便的看到subscription的历史文章,但现在这些都不存在了……
##寻找替代品
不得不说GReader去世之后,真的是冒出来了茫茫多的RSS阅读器,这也足以证明他当年有多么可怕,真的是一统江湖,可惜没有千秋万载。
寻找替代品的路上,让我现在还印象比较深的,就是feedly、The Old Reader还有digg和AOL的reader这些。The Old Reader正如其名,是最像GReader的,但我最后没有选择他的原因也很简单,就是担心过不了多久就会撑不下去。其它的那些reader,总是让我不太习惯,有的还没有非常非常重要的全文搜索功能,总之是各种不满意。最后还是选择了feedly一直用到现在,但其实使用量已经远不如以前用GReader的时候了。
##想法
因为不满意各种替代品,也可能因为一些怨念,我就开始又想要重复造轮子,来打造个让自己满意的RSS阅读器。
在我看来,作为RSS阅读器比较重要的一些特性是如下几点:
- 稳定,能长久保存历史数据
- 全文搜索
- 快捷键
- 多平台支持
要我自己来做到这点,显然是非常困难的,在有限时间内几乎不可实现。但后来想到了GMail,这个也是我每天必用的Google产品。能很好的满足以上的几点要求,而且在界面上来说,也跟GReader很类似,从习惯上来说转移代价也会比较小。所以,我打算做的就比较简单了。只要写个服务端获取RSS,然后通过邮件发送到阅读用的GMail,最后通过GMail的Label来区分条目和分组就好了。(当然,其实连GMail都不能保证能一直活下去的,笑)
##方案
我首先想到的是用GAE作为服务端,可以用cron来获取RSS,也有接口来发邮件,非常方便。但还好我去仔细看了下他的配额限制,每天只有一百封的邮件发送配额,实在是不可能满足我的要求。最后我就考虑直接用我的Raspberry Pi来做服务器算了。而考虑用什么写,我没什么犹豫就选了Python,感觉也没什么理由,方便而已。
当我把RSS作为邮件一封封发送过去之后,很显然还需要对每封邮件进行分类。这点我用的是Google Script,他提供了比较方便的API来控制GMail。
##用到的一些东西
- ConfigParser: 我之前很傻的把配置信息写在了程序里,然后每次git之前都要删掉,非常的麻烦和不专业,最后用了一个ini作为配置文件就解决了,这个是用来解析配置文件的
- smtplib: 用来登录、发邮件等
- logging, base.log: 用来在终端输出比较友好的提示信息
- md5: 我存了每个订阅当前条目的MD5,来判断更新到何处
- ElementTree: 我把订阅信息还有更新等都存在一个XML里,这个是用来解析XML,很方便
- feedparse: 用来解析RSS
##成果
最后,我就弄出来了这么个东西: rss2email。
这里有两个Python文件,其中rss2email是主要的,greader2xml是用来把greader备份的XML文件转换成我需要的XML格式。HandleGMail是用来处理邮件的Google Script。
代码也重构了很多次,怎么都不满意,成果也是不太满意,只是勉强达到能用的程度。
##使用方法
因为我也没想要正式发布,所以使用方法就先简略写写了,作为程序员,我是不太喜欢写文档的,你们懂的。
- config.ini是配置文件,我默认设置的是GMaild的SMTP,具体的填写可以看config.ini.sample文件
- 订阅信息我是存在rsslist.xml里,这个你可以手动修改,格式参考rsslist.xml.sample,也可以通过执行greader2xml.py,来把同目录下的subscriptions.xml(GReader导出的)自动转换为rsslist.xml
- 最后执行rss2list.xml就行了,执行的过程中会有提示信息
还有问题,可以直接邮件问我。
##不足
- 我是使用GMail的SMTP来发送邮件,但每天好像也有500的上限,真是吐槽不能,凑合着用还是够了
- Google Script也有一些限制,比如对GMail的API调用限制,还有一定时间内的调用限制
- 我用Python获取RSS的速度实在有点慢,比如我200多条订阅,每个获取不超过10个条目,都需要大概2个多小时才能搞完,让我无法忍
- 写得有点丑,不忍直视的感觉,但不知改进,求大牛点醒
- ……
##Roadmap
- 使用多个邮箱来发送或者自己搭建一个Email Server,来解决邮件发送限制
- 优化一下HandleGmail那个脚本
- ……
##后话
其实,自从Google挂掉以后,我对于RSS的依赖性大大降低,花在上面的时间至少减少了90%(这大概是Google想看到的吧,笑)。也是因为如此,这个重复造轮子的项目,我也不会很勤奋的更新下去,只能算是我自己发泄怨念的一个玩具吧。对于Google Reader之死,最让我感慨的就是,没有什么服务是永恒的,像Evernote那样宣称要做百年公司的,现在看来真是业界良心啊。连Google都能这么不靠谱,其实也没什么可以信赖的了,一切都要掌握在自己手中才是王道。
##推荐