KindleEar是部署在Google Appengine上的免费应用,主要功能是自动定期通过RSS收集网络文章然后制作成图文并茂的电子书推送至你的Kindle。
主要特性:
此应用托管在Google App Engine(GAE)服务器上,不需要你自己的服务器。
注意:GAE(Google App Engine)不是GCE(Google Computer Engine),只要应用使用的资源不超其免费额度,则GAE永久免费,但是GCE仅提供60天试用免费。
以下是正规的搭建步骤:
cd "C:\Program Files\Google\google_appengine"
c:\python27\python.exe appcfg.py update C:\kindleear\app.yaml c:\kindleear\module-worker.yaml
c:\python27\python.exe appcfg.py update C:\kindleear\
以下是推荐的简化搭建步骤(使用uploader):
收不到推送的RSS原因很多,如下是几种可能:
全文RSS就是在RSS的XML文件中已经给出了文章全文的RSS,使用浏览器打开RSS对应的链接,查看是否已经有全部的文章内容?如果是,则为全文RSS。如果仅给出文章摘要,则不是。
全文RSS当然可以按照摘要RSS处理,这样就忽略RSS链接中给出的文章内容,而直接到原链接中获取,只是时间要多花费不少,导致支持的RSS数量下降。如果是摘要RSS,则不能按全文RSS处理,否则会导致文章内容不全。
有些RSS每周更新,这样每天推送同样的内容就蛋疼了点,碰到这种情况,有两种处理方法:
deliver_days=['Friday']
deliver_days=['Sunday', 'Friday']
需要及时跟踪网站最新消息的同学可能有一天推送多次的需求,以下步骤告诉你如何实现:
deliver_times=[6,14,22] #6:00,14:00,22:00三次推送
oldest_article=28800 #8*60*60
URL过滤器为高级功能,面向懂python正则表达式的同学,应用场景是这样的:有一些RSS的一部分固定的图像会一直下载不了或者其本身就是烦人的广告图像,为了节省时间支持更多的RSS或更好的阅读体验,则可以过滤这些图像URL,不再下载。URL过滤器支持正则表达式,请严格按python正则表达式的语法编写URL过滤器。
升级到1.5及以上版本,并且将被qiang的RSS的链接协议改为https。
升级到1.5及以上版本,在封面/报头文件设置中有全路径信息即可,如下:
mastheadfile = 'books/xxxx.gif'
coverfile = 'books/xxxx.jpg'
墙内的朋友有时候在上传代码时遇到此错误:urllib2.URLError: <urlopen error [Errno 8] _ssl.c:504: EOF occurred in violation of protocol>,如果这样,改hosts即可:“74.125.229.174 appengine.google.com”
对于自定义RSS和不指定编码的内置书籍,软件使用多种方法综合确定网页的编码:HTTP头/HTML头/python模块chardet检测的编码,最终结果并不是100%正确的,如果检测错误,则文章可能乱码,这在浏览器上偶尔碰到网页乱码一样道理。
因为这种情况很少见,KindleEar仅提供一个不是很优雅的hack方案:手工更改数据库缓存的chardet检测的编码。
方法如下:
如果是忘记非管理员账号的密码,则可以通知管理员改密码。
如果是管理员密码,则可以登陆 App Engine,在左边选择 "Datastore | 实体",在种类里面选择 "KeUser",选中 name 为 admin 的行,记下 "secret_key" 的值,比如为 "abcdefgh",在前面加随便几个字符,比如 "123abcdefgh",然后随便搜索一个在线的MD5计算网站,将其转换为MD5摘要字符串,比如 "8b920d97ca5fceff6c5835223c541bf4",再点击修改上面选择的数据行,将最后的MD5字符串填写到passwd域,然后点击页面下方的保存,重新使用密码 "123" 登录。
xxx@appid.appspotmail.com是KindleEar附送的邮件服务,在部署好KindleEar后,你自动拥有了无数个EMAIL邮箱地址,格式为:xxx@appid.appspotmail.com,xxx为任意合法字符串,appid为你的应用名。
这个经过网友们试验,和伟大的墙有关系,有一个解决方法:KindleEar先推送至某个个人邮箱,然后此个人邮箱自动转发至中亚的kindle邮箱。
不过还面临一个问题:部分邮箱设置自动转发需要发到邮箱的验证,而亚马逊邮箱不能登陆无法验证。其实你需要的是找一个不需要目标邮箱确认的邮箱来设置自动转发,比如outlook.com。
如果有外文RSS而且需要在kindle上查字典的话,请将自定义RSS的语言设置为对应的外文。
同时,还要注意合并书籍推送的其他特性:
启用此功能后,KindleEar会在每篇文件的最后都附加一个超链接,在Kindle上点击此超链接会自动打开浏览器将你正在阅读的此文章归档至网络笔记或分享至社交网络(需要打开网络连接)。
有几点需要注意的:
有些网站需要先注册账户然后登陆后才能阅读和下载文章,对于此类网站,则可以仿照books目录下的预置书籍,增加一个新的py文件,然后设置这几个属性:
needs_subscription
:设置为Truelogin_url
:为此网站的登陆网页URLform_4_login
:可选(如果你不会看网页HTML源码就暂时不用设置),如果不设置或设置为None则KindleEar尝试自动判断;设置为整数则表示此网页中第几个form为登陆表单(0为第一个);设置为字符串则表示对应登陆表单form的名字,'#'打头表示id,'.'打头表示class,否则则匹配name/id/class任何一个。注1:因为GAE环境的限制,需要执行javascript或要输入验证码的网站则无法支持。
注2:对于一些足够特殊和复杂的网站,可能你需要在书籍子类中重写login()函数。
注3:你输入的密码将加密保存,密钥为每个账号都不一样的8位随机字符串,有一定的安全性,而且我尽量照顾你的密码安全,你可以随时删除保存的密码信息,书籍退订后也马上删除密码,但因为密钥也保存在GAE上(在另外的数据表),所以不能保证很高的安全性,请自己明白并愿意承担其中的风险。
在IE6下网站排版混乱并且无法显示导航栏,因为网站的排版采用YAHOO的CSS框架pure,而此框架要求IE7以上的IE,或者chrome/firefox,如果你使用的IE版本过低,建议升级到新版本。
一旦你选择了“合并推送”,则所有订阅源都会合并成一本书籍推送至kindle,如果你需要有部分订阅源分开单独推送,则在订阅时选择“Separate“。
有部分网友在部署后打开此应用的“我的订阅”和“投递日志”网页会出现“internal server error”错误,一般情况下因为gae没有及时生成对应数据库的索引导致。
你可以打开gae后台,查看logs日志,看是否有“NeedIndexError: no matching index found.”异常,如果有的话,证明是没有生成索引。
你也可以在gae后台查看“Datastore Indexes”,看每个条目的“Status”,正常情况下应该都是“Serving”,如果是“Building”或其他值,则说明索引也没有正确生成。
如果你部署步骤完全正确的话,可以稍等几分钟到几十分钟,等gae自动生成索引,如果gae没有成功自动生成索引,你也可以手动更新索引:
python appcfg.py update_indexes KindleEar/
在终端窗口执行此命令,注意最后一个KindleEar是你保存的此应用的目录名。
如果出现的异常信息中有“UnknownQueueError”,则说明部署有问题,可以先单独执行此命令上传更新队列配置信息:
python appcfg.py update_queues KindleEar/
这几个命令也可以执行一遍试试。(比如手动可以推送无法自动推送则执行 update_cron)
python appcfg.py update_cron KindleEar/
python appcfg.py update_queues KindleEar/
python appcfg.py update_dispatch KindleEar/
如果上面的步骤执行完后还是不行的话,请按照正确步骤重新部署。
默认配置下如果合并多本书籍,则合并后的封面会将所有书籍的封面缩小并拼贴在一起,并且每次推送的排列顺序都不一样,此效果由config.py里面的参数项 DEFAULT_COVER_BV 控制,默认为 None。
如果你不喜欢这个效果,设置DEFAULT_COVER_BV为某个文件名则可以取消此效果,比如:
DEFAULT_COVER_BV='cv_bound.jpg'
网站 今天看啥 提供微信公众号转RSS服务(注意在添加RSS时选择isfulltext选项)。
在天朝的网友在部署时和使用时会遇到一个强大的墙,特别google又是特别重要的黑名单,这是几个简单的说明,其他的请自己解决:
Pocket 是一个比较流行的稍后阅读应用,你在电子书上读到有趣或有用的文章后,可以选择将其发送到你的Pocket账号,然后就可以通过跨平台的Pocket应用来继续阅读。
要启动此功能,请按如下步骤打开:
到Gae后台的Settings页面,看看 已经授权的Email列表里面有没有你的发送邮箱地址,如果没有就添加即可。
目前支持以下网站的漫画
位置 | 修改前 | 修改后 | 说明 |
7行 | return Conan | return Soma | 使用"Soma"作为类名 |
9行 | class Conan(CartoonMadBaseBook): | class Soma(CartoonMadBaseBook): | 使用"Soma"作为类名 | 10行 | title = u'[漫画]名侦探柯南' | title = u'[漫画]食戟之灵' | 漫画名为【食戟之灵】 | 11行 | description = u'日本漫画家青山刚昌创作的侦探漫画' | description = u'由附田祐斗原作,佐伯俊作画的连载作品。' | 漫画的简单说明 | 17行 | feeds = [(u'[漫画]名侦探柯南', 'http://www.cartoonmad.com/comic/1066.html')] | feeds = [(u'[漫画]食戟之灵', 'http://www.cartoonmad.com/comic/1698.html')] | 在网站上搜索到该漫画的网址 |
在设置界面,可以设置sendgrid发送邮件,需要在下面网站申请帐号并创建自己的apikey。
sendgrid
推荐按照Google的官方说明进行操作。
google
需要说明的是sendgrid支持的邮件大小是30M,但是由于gcloud的urlfetch的限制变成了10M。
如果你碰到更多问题,可以到 https://github.com/cdhigh/KindleEar/issues 去提交一个issue,然后等待答复,不过在提交问题之前,还是建议先搜索一下别人先前提交的issues,说不定已经有人重复提过了相关问题呢?
如果没有别人提过类似问题,你在提交新问题的时候,建议附上 GAE后台 的Logs信息,以便定位问题,也可以得到更快的答复。