CentOS 上实现 Google Reader 自动推送到 Kindle 的功能

首先,如果你嫌麻烦而且没有VPS而且对推送的内容不需要包含图片的话,那么你可以直接去下面这个网站:

http://reader.dogear.mobi/

直接用你的Google帐户登陆就好,一步搞定,不过推送过来的东西没有图片,所以很不爽。那么就按照我的步骤来一步步完成这个事情吧。

首先我们需要做一个准备工作,因为CentOS上面的Python是2.4的很多库都木有,然后呢一个个去装又比较麻烦,所以我就直接升级了CentOS上面的Python到2.7.1,步骤很简单,登陆到VPS的SSH后步骤如下:

1.从官网下载Python 2.7

wget http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tar.bz2

2.安装

tar -jxvf Python-2.7.1.tar.bz2 cd Python-2.7.1 ./configure (如不指定 --prefix,默认安装在/usr/local/lib/python2.7) make && make install

3.设定默认版本

mv /usr/bin/python /usr/bin/python24 ln -s /usr/local/bin/python2.7 /usr/bin/python

好的,这里开始你的VPS上面的Python就是2.7.1的了,下面就开始我们的正题咯~首先我们要准备的东西如下:

1.kindlereader

https://github.com/jiedan/kindlereader

这个是用来抓取Google Reader的一个小程序,Python写的,git管理,可以直接在VPS上用命令:

git clone https://github.com/jiedan/kindlereader.git

但是由于后面有些东西要修改而且还要添加一些内容,所以推荐在本地先同步下来测试好在和后面的文件一并打包上传到vps里面。同步下来的文件这些是有用的:

kindlereader.py 、lib(文件夹)、feed2mobi.py、config.ini(同步下来是config.sample.ini,改名为config.ini)

把上述文件放到一个文件夹里面。

2.Kindle Publishing Programs

下载地址:http://www.amazon.com/gp/feature.html?ie=UTF8&docId=1000234621

这个是用来生成图文并茂的kindle的mobi文件用的,必须包含,因为要跑在CentOS上面,所以选择Linux版本下载下来,并且把压缩包里面的kindlegen这个文件放到刚git 获取下来的 kindlereader 文件夹里面(注意,需要和kindlereader.py同目录)

到这里,准备工作就好了,下面开始配置工作。

配置工作非常简单,主要就是修改config.ini文件,里面都有中文的注释也不用多讲,我这里就贴官方的sample了~:

[general] ; 是否自动退出, 1 要, 0 否, 计划任务一般都要自动退出 autoexit = 0 ; 输出格式,支持 epub 和 mobi,默认为 mobi ; TODO:epub计划中还不支持 outputformat = mobi ; 输出 kindle格式的类型: book 或 periodical kindleformat = book [reader] ; google reader 用户名 username = yourname@gmail.com ; google reader 密码,可以不写提示时再输入 password = ; 需要抓取的分类,此项优先于 skipcategories, 仅当此项为空时 skipcategories 设置有效 selectcategories = ; 跳过分类,用英文逗号隔开, 例如:label1,label2 skipcategories = ; 是否要标记为已读: 1 标记, 0 不标记 markread = 0 ; 每个feed中最多抓取条目 maxitemsnumber = 20 ; 排除已读 1 是 0 否, 如果设置为是则为只加载未读条目,反之亦然 excluderead = 1 ; 每篇文章最多下载图片数数目, -1 为不限, 图片太多可能需要时间很长并且造成mobi过大无法发送 ; 如果下载图片需要kindlegen支持,请确保kindlereader.exe所在目录中包含kindlegen.exe maximageperarticle = 5 ; 邮件发送设置 [mail] ; 是否发送邮件,如果不发送可以直接拷贝 /data/ 中相应文件到kindle: 1 发送, 0 不发送 ; 下载图片一般mobi会很大,建议不要发送邮件了,直接到/data目录拷贝mobi文件至kindle mail_enable = 0 ; 发件人,请使用亚马逊注册邮箱,或你的"Your Kindle's approved email list"中的其他邮箱 from = youremail ; 亚马逊提供的投递邮箱地址,注意 @free.kindle.com只能投递到wifi, @kindle.com可以投递到3G但要收费,也可以填写一个其他邮箱地址,由该邮箱转发到你的kindle邮箱地址 to = "name"@free.kindle.com ; smtp服务器地址可以使用gmail的smtp服务器 host = smtp.gmail.com ; smtp服务器端口, 不加密一般为 25, 加密一般为 465 port = 465 ; smtp服务器是否需要 ssl: 1 需要, 0 不需要, 请根据你使用的smtp实际情况选择 ssl = 1 ; smtp服务器需要认证时请填写下面两项,任何一项不填写则认为你的smtp服务器不需要认证 username = password =

这里还有一个小小的修改,因为我们是在vps上面做计划任务,所以不管程序执行结果如何我们都是希望程序自动退出的,这样就不需要人工干预了。所以,对于kindlereader.py这个程序,我们还需要修改一点点代码。

第731~737行原来是这样的

try: if self.config.get(section, name).strip() in ['1', 1]: autoexit = True else: autoexit = False except: auto_exit = False

修改为

try: if self.config.get(section, name).strip() in ['1', 1]: autoexit = True else: autoexit = True except: auto_exit = True

好了,到此我们就完全配置好了,之后就是把所有文件上传到服务器某个目录下面,比如/home/kindle/这个目录

然后写这样一个脚本文件:

#!/bin/sh cd /home/kindle/ python kindlereader.py

保存为start.sh 赋予执行权限

chmod a+u start.sh

然后修改cron任务,执行

crontab -e

添加这么两行
30 7 * * * sh /home/kindle/start.sh
30 23 * * 0 rm -r /home/kindle/data/

第一条的意思是每天7点半给我推送,第二条是每周日23点30分删除掉之前的所有data(这个文件夹里面放的都是这周产生的缓存文件)
至此一切完美,睡觉去吧。。。然后第二天早上你的kindle里面就有推送过来的东西咯~

病愈杂谈

突然很莫名其妙的起了这么一个哭笑不得的题目,然后就开始若无其事的写最近的事情。

最近天气太变态,前几天中暑了,然后引起发烧,头疼,之后是发烧引起的浑身酸疼。可惜事情远远没有结束,酸疼为止,腹泻又来,时至今日,菊花微疼。sigh~

其实这两天也不是什么都没做,本来录了一段关于Lion的Podcast,不过听了一遍发现实在是太空洞了,估计是我太久没和外界交流,没说话,录制的节目听起来和大妈絮叨似的,当时我就残念了,结果也就没有发布上来。这几天估计想想录个好一点的玩意吧,嘿。

身体基本上好了,感觉真不错,活着真好,应该加强一点锻炼了。

然后然后就是前天突然发现自己是把kindle 带回来的。。当时又残念了下,一带回家我就很好的把kindle放抽屉里了,所以一直没找到,还以为没带回来上网买书去了。。。无奈的很。放假前看到@Shineamnys 在电脑上看哈利波特系列的原版书,美其名曰锻炼阅读能力,想想也不错,改天弄几本威尔斯的原版科幻小说去看看,kindle上面查字典也算是方便的,我也美其名曰锻炼一下。

之前的一次做梦的时候,突然想到一句很霸气的话——不是你不够好,而是世界还没准备好接纳你。说实话,我也不知道我想表达的是个什么意思,大抵是最近想太多,失眠太多加上之前郁郁不得志的点点滴滴混杂所得的碎碎念吧。

发现之前的Google Reader 自动推送到Kindle的服务突然没有用了,上去一看,居然是mail地址改变了,囧,算了,别人的服务总是不放心,还是自己搭建一个好了,稳定高效还带图片,多给力啊。这里简单说一下吧:

用到的工具是这个:https://github.com/jiedan/kindlereader 一个开源项目

直接去服务器上面git下来,然后修改一下config.ini就好,中文注释一目了然~ 之后在centos的cron里面加入python kindlereader.py 这条命令的计划任务就搞定了,当然由于我是让它每天推送的,这样目录下面的data文件夹会很大,所以再加一个rm -r /你存放data的位置/data  的计划任务到cron里面,万事搞定(我设置为一个礼拜清理一次)

这里有几个要注意下,centos的python是2.4的很低的版本,无法跑,可以自己编译一个2.7上去,方法很简单,就是configure一下,在make && make install 就好,这里就不多说了。

这样,每天就会收到很不错的Google Reader推送,心旷神怡啊啊啊!

昨天看了一部电影 就是那个拍了的 Duncan Jones 的电影。这部电影和很多美国大片感觉差不多,小人物小故事发现了某某组织的大阴谋,剧透就免了,电影还是不错的,小细节很感人,推荐一看。特别喜欢里面的那个AI辅助机器人Gerty的各种表情,很有爱。这里有图

http://movie.douban.com/photos/photo/692205914/

既然提到了那么我肯定是看过了的,电影的确不错,虽然没有一开始造势的时候说的有那么给力,但是还是蛮有程序的味道的。特别是里面的军方比较傻叉,以为结束了进程里面的一个线程就结束了整个进程,导致每次执行都产生一个平行世界的新进程跑着。在我这里,这个故事是这样子的:某个计算机里面的某个进程里面的某些线程一直用某个特殊的线程当作钩子,去hook另外一个刚刚建立的新的进程里面的某个线程,然后直到钩子线程返回一个满意的值为止。但是钩子线程不满意又去开了个新进程hook进去后再也不返回,于是钩子线程替代了新线程里面的某个进程,以全新的生命起在新进程里面愉快的执行下去了,就是这样。

好吧,不管你头晕与否,我又很欠抽的开始想,要是一直创建平行世界会不会因为创建的太多内存溢出什么的。。。哈哈,总之告诉我们,内存回收是很重要的,否则内存泄漏了或者程序没法正常结束了,都是很麻烦的,恩,真是一部很好的教育片。

啊啊,btw,我还看了一部超级烂的俄文片<超能游戏者>除了帅哥美女,其他完全没法看。。。