不再依赖Google Reader的Kindle Reader

  Kindle Reader是一个自动将Google Reader内容生成mobi文件并通过邮件发送至kindle的工具,由jieban开发。由于Google Reader即将关闭,所以我对其进行了一些修改,让程序从配置文件读取RSS地址并直接访问内容,不通过Google Reader的API,从而不再依赖Google的服务。
  感谢jieban迅速接受了我的Pull Request,本文中的程序已经被合并到主分支。欢迎有兴趣的朋友到Github的Kindle Reader项目去观看代码并给出意见(本人fork出来的repository在此)。
  多用户版正在开发,将免费提供公开服务,不再需要用户自行运行程序,类似于狗耳朵、kindle4rss等。

  更新历史

0.6.5 修正一个当rss中author为空时的隐蔽错误;修正运行目录不能含有空格的错误;修改模板,在正文界面显示来源和作者;停止为多用户版进一步重构,代码与多用户版开始区分  
0.6.4 修正win下的路径错误;修正目录页的内容摘要(过滤html标签);更换BeautifulSoup版本  
0.6.3 新增时区选项,所有可见的日期显示均根据用户选择的时区(默认为+8);新增灰度图选项,在生成mobi前将图片转为灰度图,减小文件体积(默认关闭);允许用户选择是否启用kindlestrip  
0.6.2 修改mobi文件标题,现在periodical格式在原生系统能自动归档了(但两个文件为同一天的,会将较新的文件归档,目前无法解决)  
0.6.1 修复一些问题;尝试处理一些不合规范的时间信息;在所有文章信息中均使用utc时间  
0.6.0 对feed读取也采取了多线程,大幅度提高速度;重构代码,为开发多用户版做准备  
0.4.9 增加强制全文输出的功能,使用fivefilters.org,为了避开该站点免费用户每次只能输出3篇文章的限制,尝试将每篇文章单独发给该站点进行解析  
0.4.8 不再需要安装feedparser库,Python 2.7环境可以直接使用本程序  
0.4.7 优化feed读取和图片下载流程,下载失败自动进行重试;修复了对不提供发布时间的RSS格式支持  
0.4.6 修复了对图片URL中含有非ASCII字符的支持,并加强了下载图片的效率和适应性  
0.4.5 修复了对不提供author或content节点的RSS格式支持  
0.4.4 引入Kindlestrip,大幅度压缩了生成mobi文件的大小(一般小于原先的50%);打包了exe文件,使得NoGR分支可以在windows不依赖Python环境运行,对普通用户更加友好  
0.4.3 修复了不会自动退出的BUG;修复了对"/"结尾Feed地址处理的BUG  
0.4.2 修复了某些feed地址必须以"/"结尾或反之所导致的问题,对feed是否读取成功进行判断  
0.4.1 增加限制最旧文章时间的功能;修改了日期格式  
0.4.0 it works

  主要功能

  • 保留原有的读取内容、生成mobi文件并发送到任意邮箱的功能
  • 相比著名推送服务如kindle4rss、狗耳朵等来说,通过本程序自建服务可以让mobi包含图片,不受任何流量和频率限制
  • 不再依赖google reader提供feed地址和内容,直接从配置文件读取feed地址并访问网站获取内容
  • 通过引入kindlestrip,大幅度缩小了生成的mobi文件大小,以方便通过邮件的推送
  • 通过使用fivefilters.org的服务,提供对RSS强制全文输出的功能

  Windows用户使用方法(很简单)

  1. 下载最新版本的v0.6.5
  2. 解压缩后,只需保留kindlereader.execonfig.sample.ini两个文件,放在任意目录,其他文件都不需要
  3. 如果你使用的系统是WindowsXP,那么你需要安装Microsoft Visual C++ 2008 Redistributable Package
  4. config.sample.ini改名为config.ini,并修改其中的内容,具体可以看文件中的注释,主要要改的选项是:
    kindle_format,默认为book,如果你想要类似于狗耳朵那样的杂志形式,请改为periodical(只对官方系统有效)  
    max_items_number,每个RSS源最多读取多少篇文章,建议不要太多  
    max_image_per_article,每篇文章最多下载多少图片,由于上述的技术更新,本程序生成的文件不再动辄十几M,所以这里多一些也没问题  
    max_old_date,不读取早于N天前的文章,一般与你多少天运行一次本程序相等,以免看到重复的文章  
    mail_enable,如果需要程序自动将生成的mobi文件发送到kindle,需要将此项设为1  
    to,一般是@free.kindle.com或@iduokan.com的邮箱,根据你使用系统的不同来决定  
    username,你的邮箱(发信用,不是收信的iduokan或kindle邮箱)用户名,如果不使用gmail发信,请相应修改host、port、ssl等选项来符合你的smtp服务器(如QQ邮箱是host=smtp.qq.com,port=25,ssl=0)  
    password,你的邮箱密码,如果不愿意将主要邮箱的密码明文写在配置文件中,可以单独注册一个邮箱专门用于发送  
    feed1,feed2等都是你需要读取的RSS源地址,比如订阅果壳网,就写成feed1=www.guokr.com/rss/,每个feed结尾的数字不能重复,即必须是feed1、feed2、feed3这样编写下去,总量不限。如果你需要打开某个feed的强制全文输出(即原来该feed的文章只有摘要),你可以在http前面加上full,即"fullhttp://www.a.com/rss/"这样的。  
    
  5. 下载亚马逊官方的mobi生成工具kindlegen,解压后只需要kindlegen.exe一个文件,跟kindlereader.execonfig.ini放在同一个目录下
  6. 运行kindlereader.exe之后,.mobi文件就会自动发送到你设置的邮箱,并被kindle所读取。如果你设置了不发送邮件,可以从当前目录下生成的data目录中找到两个.mobi文件,将较小的那个拷贝到kindle上也可以正常阅读。可以通过计划任务来让程序定期运行
  7. 如果你的kindlereader.exe一闪而过,说明出错了,请到windows命令行下运行它来查看出错信息

  Linux用户使用方法(桌面用户/VPS用户)

  1. 下载最新版本的v0.6.5
  2. 解压后,只保留lib目录和kindlereader.pyconfig.sample.ini两个文件,其他文件都不需要
  3. config.sample.ini改名为config.ini,并修改其中的内容,请参考上一段对windows用户的解释
  4. Linux用户特有的选项:grayscale,将其设为1可以让mobi文件更小一点,效果一般,必须要安装python的pillow库
  5. 尽量确保你的python版本为2.7,其他版本均未测试。如果默认版本不是2.7,最好单独安装一个,方法可以参考下一段针对虚拟主机用户的说明
  6. 下载下载亚马逊官方的mobi生成工具kindlegen,解压后只需要kindlegen一个文件,跟kindlereader.pyconfig.ini放在同一个目录下
  7. 运行python kindlereader.py即可,可以通过crontab定期运行,脚本可以参考下一段

  Linux用户使用方法(虚拟主机用户,以Hostmonster为例)

  1. 如果你的系统默认python版本就是2.7(运行python,查看显示的版本),那么使用方法完全和上面桌面/VPS用户一样
  2. 如果你系统默认的python不是2.7版本,请按照下面的说明安装2.7版本的python
  3. 修改~/.bash_profile文件,确保文件中有以下内容(如已有某行,不用再写这一行)
    PATH=$HOME/bin:$PATH
    LD_LIBRARY_PATH=$HOME/lib/
    export PATH
    export LD_LIBRARY_PATH
    
  4. 安装python
    $ wget http://www.python.org/ftp/python/2.7.4/Python-2.7.4.tgz
    $ tar -xvfz Python-2.7.4.tgz
    $ cd  Python-2.7.4
    $ ./configure --prefix $HOME
    $ make install
    
  5. 确保kindlereader.pyconfig.inikindlegenlib目录都存在的情况下,运行~/bin/python kindlereader.py即可
  6. 可以使用脚本以便cron来运行,假设你的家目录是/home1/xxx/,你将kindlereader.pykindlegenconfig.ini存放在/home1/xxx/kindle/下面,那么写一个kindle.sh放在同一目录下
    #!/bin/sh
    cd /home1/xxx/kindle/
    /home1/xxx/bin/python kindlereader.py
    
  7. 在虚拟主机控制面板里的“时钟守护作业”中填入/home1/xxx/kindle/kindle.sh,我选的运行频率是0 15 */3 * *,即每三天运行一次,在主机时间的每天15点。
  8. 顺便可以再做一个cron任务,用于清理生成的data目录,填入rm -rf /home1/xxx/kindle/data/即可,频率和上面一样,但时间要推迟一点,比如0 16 */3 * *

  常见问题

  • 想要类似于狗耳朵那样的杂志格式?请设置config.ini里的kindle_format = periodical,在K4和KPW上测试无问题。如果你这样设置还是不能正常显示杂志格式,请将config.ini中的kindlestrip改为0试试看
  • 旧版本用户已经安装了feedparser怎么办?不影响使用,你也可以卸载掉
  • 报错找不到kindlegen?请下载对应你系统的版本并确保放在同一个目录下
  • 无法用上面的链接直接下载kindlegen?请到这个官方页面下载
  • RSS内容/图片无法读取?多试几次,一般是网络原因,同时请确认你的RSS地址正确
  • 无法在kindle fire或非kindle设备上阅读?可能是因为去除了mobi文件中的KF8格式支持,请将config.ini中的kindlestrip改为0试试看
  • 订阅的feed太多,导致每次运行时间太长?请将config.ini中的thread_numbers改为10或更高,建议不要超过20
  • VPS等小内存环境,运行时占用内存太多甚至导致系统出错?请将config.ini中的thread_numbers改为2或3
  • 如果上述解答不能解决你的问题,或者你发现BUG,或者你觉得有重要的功能需要添加,请到github上提交Issue

  使用建议

  建议放在虚拟主机或VPS上,使得程序定期运行;建议只订阅少量的、精品的、长篇的RSS源,如果壳网、科学松鼠会、译言精选等,新闻性的内容还是更适合用手机和电脑阅读;建议更新频率不要太频繁,我自己设置是3天运行一次,这样我才不会因为积存了很多未读文件而干脆不去读;建议每个feed每次更新内容在5-10篇,总共不超过30篇为宜,过多也会造成阅读懒惰;如果有喜欢的RSS源但网站不输出全文,可以使用新增的强制全文输出功能(看上面的介绍);如果遇到fivefilters不能解决的网站,可以考虑用yahoo pipes进行精确自定义处理。

  希望所有的kindle用户都能顺利使用本程序,享受阅读的快乐。

Author | William Gates

从2006年开始写Blog,从那时的苦情技术宅到现在初为人父的资深律师,删掉年少的刻奇、过时的技术文章、幼稚的社会评论,重新出发。