主页 > 程序人生 > CentOS 上实现 Google Reader 自动推送到 Kindle 的功能

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

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

2.安装

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

3.设定默认版本

1
2
 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上用命令:

1
 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了~:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
[general]
; 是否自动退出, 1 要, 0 否, 计划任务一般都要自动退出
auto_exit = 0
 
; 输出格式,支持 epub 和 mobi,默认为 mobi
; TODO:epub计划中还不支持
output_format = mobi
 
; 输出 kindle格式的类型: book 或 periodical
kindle_format = book
 
[reader]
; google reader 用户名
username = yourname@gmail.com
 
; google reader 密码,可以不写提示时再输入
password =
 
; 需要抓取的分类,此项优先于 skip_categories, 仅当此项为空时 skip_categories 设置有效
select_categories =
 
; 跳过分类,用英文逗号隔开, 例如:label1,label2
skip_categories =
 
; 是否要标记为已读: 1 标记, 0 不标记
mark_read = 0
 
; 每个feed中最多抓取条目
max_items_number = 20
 
; 排除已读 10 否, 如果设置为是则为只加载未读条目,反之亦然
exclude_read = 1
 
; 每篇文章最多下载图片数数目, -1 为不限, 图片太多可能需要时间很长并且造成mobi过大无法发送
; 如果下载图片需要kindlegen支持,请确保kindlereader.exe所在目录中包含kindlegen.exe
max_image_per_article = 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行原来是这样的

1
2
3
4
5
6
7
    try:
        if self.config.get(section, name).strip() in ['1', 1]:
            auto_exit = True
        else:
            auto_exit = False
    except:
        auto_exit = False

修改为

1
2
3
4
5
6
7
    try:
        if self.config.get(section, name).strip() in ['1', 1]:
            auto_exit = True
        else:
            auto_exit = True
    except:
        auto_exit = True

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

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

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

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

1
 chmod a+u start.sh

然后修改cron任务,执行

1
 crontab -e

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

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

相关日志

, , , , ,

评论:27

参与评论
  1. 回复 Jaycee
    11/07/10

    帮我推送啊!!!

  2. 回复 张歌之
    11/07/11

    帅气,支持+1。快上+1按钮啊,哈哈哈。

  3. 回复 Glegoo
    11/08/01

    我是有点担心,这种“图文并茂”的mobi文件大量推送过来会不会把我的kindle装满了…….

    • 回复 混沌的云
      11/08/01

      不会,只要你的googlereader未读不是很多就不会很大,因为太大的无法用邮件发送
      我一天早中晚各推送一次,每个文件大约4M
      我订阅数量还是比较多的,而且有图文并茂的摄影杂志

  4. 回复 Ekeyme
    11/11/19

    我的Ubuntu怎么不行了, 请帮助我好吗

    Ubuntu 10.04 Python 2.6
    一切按说明书设置完成后, 运行, FeedBack回来

    Traceback (most recent call last):
    File “kindlereader.py”, line 713, in
    config.readfp(codecs.open(conf_file, “r”, “utf-8″))
    File “/usr/lib/python2.6/ConfigParser.py”, line 305, in readfp
    self._read(fp, filename)
    File “/usr/lib/python2.6/ConfigParser.py”, line 482, in _read
    raise MissingSectionHeaderError(fpname, lineno, line)
    ConfigParser.MissingSectionHeaderError: File contains no section headers.
    file: config.ini, line: 1
    u’\ufeff[general]\r\n’

    • 回复 混沌的云
      11/11/19

      config.ini编码问题,你用什么文本编辑器修改config.ini的?

  5. 回复 ekeyme
    11/11/20

    Gedit Ubuntu 自带那个,我还试过iconv转过编码也不行, cenos 你都可以搞定,ubuntu 与 debian都不行,也是一样错误。奇怪了。 等待回复

    • 回复 混沌的云
      11/11/20

      你的错误应该就是编码问题啊。。。具体你可以google下,我在mac和centos都可以实现

    • 回复 混沌的云
      11/11/20

      你试试直接用vim编辑,不要用图形化的编辑器

  6. 回复 Ekeyme
    11/11/21

    搞定, 没有改动config.ini的编码. 因为试过很多次都不行, 最后没办法. 就到 kindlereader.py 里面找到 713 行 config.readfp(codecs.open(conf_file, “r”, “utf-8″)) 改成 config.readfp(codecs.open(conf_file, “r”, “utf-8-sig″)), 搞定.

  7. 回复 lmy
    11/12/27

    我的问题是error: [Errno 13] Permission denied: ‘data/images/d’,现在的google reader怎么没办设置文件夹共享了?

    • 回复 混沌的云
      11/12/27

      这个和google reader无关,是你的服务器上面文件夹权限错误

  8. 回复 Chovan
    12/02/07

    请问你在Freenas下运行成功吗?
    我在Freenas 8.0下运行,可以成功Fetch RSS内容放到data目录下,可是kindlegen 出错:

    ./kindlegen: 1: Syntax error: “(” unexpected
    02-06 14:16:394 ERROR failed!

    手工运行了一下./kindlegen 提示如下:
    ELF binary type “0″ not known.
    ./kindlegen: Exec format error. Binary file not executable.

    狗了一下,似乎是Executable Type的问题FreeBSD应该是type 9, 运行
    brandelf -t FreeBSD Kindlegen 后倒是没有Binary type的问题,但是提示System failed.

    已经重新下载了kindlegen,没有改变。

    谢谢!

    • 回复 混沌的云
      12/02/08

      抱歉,没有用过Freenas,所以没法给你答复。。。最大可能就是不支持Freenas

    • 回复 混沌的云
      12/02/09

      不过freenas是基于freebsd的,因为freebsd是BSD系列的,和linux还是有一点差别,估计是不支持吧

      • 回复 Chovan
        12/02/10

        是啊,我研究一下怎么在FreeBSD上load Linux Layer. 但是FreeNAS的FreeBSD又是精简了的,很可能要自己在FreeBSD基础上Build 一个FreeNAS,真是纠缠值不值得这么折腾啊。

        • 回复 混沌的云
          12/02/12

          换系统吧亲~

          • Chovan
            12/02/14

            呵呵,谢谢!换了。换成OpenMediaVault, 基于Debian,世界清静了…

          • 混沌的云
            12/02/15

            哈哈,恭喜

  9. 回复 Sping
    12/03/09

    你好,请问你的能够成功输出“期刊”格式吗?你用的是哪个版本的Kindlegen?

    • 回复 混沌的云
      12/03/09

      比较早的版本,一直没升级,所以也不知道期刊格式是什么。。。

      • 回复 Sping
        12/03/09

        冒昧问一下,能给我发一个你用的版本吗?谢谢!
        我的输出一直有问题

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

引用:2

下面所列的是引用到本博客的链接
CentOS 上实现 Google Reader 自动推送到 Kindle 的功能 来自 混沌的云
pingback 来自 Kindlereader GR RSS推送测试中 | CCAV·裏 2012/01/29

[...] 在vps上跑Kindlereader,参考这里 [...]

pingback 来自 Kindle3 3G开箱照 + Kindlereader 在Linux的部署实现推送 | 萝莉天下 2012/02/04

[...] 推送用的是狗耳朵开源的软件Kindlereader,教程参考这里。 [...]

顶部