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用户使用方法(很简单)
- 下载最新版本的v0.6.5
- 解压缩后,只需保留
kindlereader.exe
和config.sample.ini
两个文件,放在任意目录,其他文件都不需要 - 如果你使用的系统是WindowsXP,那么你需要安装Microsoft Visual C++ 2008 Redistributable Package
- 将
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/这样的。
- 下载亚马逊官方的mobi生成工具kindlegen,解压后只需要
kindlegen.exe
一个文件,跟kindlereader.exe
和config.ini
放在同一个目录下 - 运行
kindlereader.exe
之后,.mobi文件就会自动发送到你设置的邮箱,并被kindle所读取。如果你设置了不发送邮件,可以从当前目录下生成的data目录中找到两个.mobi文件,将较小的那个拷贝到kindle上也可以正常阅读。可以通过计划任务来让程序定期运行 - 如果你的
kindlereader.exe
一闪而过,说明出错了,请到windows命令行下运行它来查看出错信息
Linux用户使用方法(桌面用户/VPS用户)
- 下载最新版本的v0.6.5
- 解压后,只保留
lib
目录和kindlereader.py
和config.sample.ini
两个文件,其他文件都不需要 - 将
config.sample.ini
改名为config.ini
,并修改其中的内容,请参考上一段对windows用户的解释 - Linux用户特有的选项:grayscale,将其设为1可以让mobi文件更小一点,效果一般,必须要安装python的pillow库
- 尽量确保你的python版本为2.7,其他版本均未测试。如果默认版本不是2.7,最好单独安装一个,方法可以参考下一段针对虚拟主机用户的说明
- 下载下载亚马逊官方的mobi生成工具kindlegen,解压后只需要
kindlegen
一个文件,跟kindlereader.py
和config.ini
放在同一个目录下 - 运行
python kindlereader.py
即可,可以通过crontab定期运行,脚本可以参考下一段
Linux用户使用方法(虚拟主机用户,以Hostmonster为例)
- 如果你的系统默认python版本就是2.7(运行python,查看显示的版本),那么使用方法完全和上面桌面/VPS用户一样
- 如果你系统默认的python不是2.7版本,请按照下面的说明安装2.7版本的python
- 修改
~/.bash_profile
文件,确保文件中有以下内容(如已有某行,不用再写这一行)
PATH=$HOME/bin:$PATH
LD_LIBRARY_PATH=$HOME/lib/
export PATH
export LD_LIBRARY_PATH
- 安装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
- 确保
kindlereader.py
和config.ini
、kindlegen
和lib
目录都存在的情况下,运行~/bin/python kindlereader.py
即可 - 可以使用脚本以便cron来运行,假设你的家目录是
/home1/xxx/
,你将kindlereader.py
、kindlegen
和config.ini
存放在/home1/xxx/kindle/
下面,那么写一个kindle.sh
放在同一目录下
#!/bin/sh
cd /home1/xxx/kindle/
/home1/xxx/bin/python kindlereader.py
- 在虚拟主机控制面板里的“时钟守护作业”中填入
/home1/xxx/kindle/kindle.sh
,我选的运行频率是0 15 */3 * *
,即每三天运行一次,在主机时间的每天15点。 - 顺便可以再做一个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用户都能顺利使用本程序,享受阅读的快乐。