KindleEar 搭建教程:推送 RSS 订阅到 Kindle

KindleEar 是一款开源的 Python 程序,由网友 cdhigh 发起,托管在 Github。它可运行在免费的 Google APP Engine 上,把 RSS 生成排版精美的杂志模式的 MOBI 文件,并按照设置定时自动推送至你的 Kindle。如果你有 Python 和前端基础,还可以自定义排版,生成你需要的最完美的 MOBI 文件。

▲ KindleEar 搭建成功后的首页界面

▲ KindleEar 推送到 Kindle 的阅读效果

KindleEar 目前的功能有:

  • 支持类似 Calibre 的 recipe 格式的不限量 RSS/ATOM 或网页内容收集
  • 不限量自定义 RSS,直接输入 RSS/ATOM 链接和标题即可自动推送
  • 多账号管理,支持多用户和多 Kindle
  • 生成带图的杂志格式 mobi 或带图的有目录 epub
  • 自动每天定时推送
  • 强大而且方便的邮件中转服务
  • 和 Evernote/Pocket/Instapaper 等系统的集成

下面这个是体验账号,可以添加一个 RSS 测试推送一下(注意按照设置页面提示添加信任列表)。

看到这些让人心动、那些收费的推送服务网站才有的功能是不是很心动了?其实搭建起来其实很简单,如果你什么都不懂,只要按照本文所给出的步骤一步一步操作就可以搞定。本文是更新后的教程,原方法需要配置上传环境,较为繁琐,现在只需要保证能科学上网,通过 Google 云端 Shell,只需要一行命令就可以搞定。现在,立即开始搭建自己的私有专属的 RSS 推送服务器吧!

目录

一、准备工作
1、能够科(fan)学(qiang)上网
2、注册 Google/Gmail 账号
3、对 Google 账号进行安全设置
4、创建一个 Google Cloud 项目
5、创建 Google App Engine 应用
6、授权 KindleEar 用 Gmail 发信
二、上传程序
方法一:自动上传
方法二:手动上传
三、设置推送
1、访问应用
2、添加订阅
3、设置推送
4、投递日志
5、账户管理
6、高级设置
7、网友分享
四、常见问题
1、登录出现 Invalid username or password
2、无法为其它 Google 账号上传程序
3、访问页面提示 internal serve error
4、投递状态显示 wrong SRC_EMAIL
5、如何修改 KindleEar 登录密码
6、能否请书伴代为部署 KindleEar
五、其它事项
六、自制订阅

本教程适用于 Windows 系统和 Mac OS X 系统,所以请注意下载适合你操作系统的软件,以及选择适合你操作系统的步骤。本文步骤没有多余的废话,请严格按照下面的步骤进行操作。遇到意外情况请留言提问,如果提出的问题文中已有说明将不再重复回答。

一、准备工作

KindleEar 依赖 Google APP Engine,所以你需要有一枚 Google 账号(注册完记得安步骤说明设置一下安全选项),然后创建一个 GAE 应用。以下步骤中,如果某个条件已具备,请忽略相应步骤继续。

1、能够科(fan)学(qiang)上网

因为在国内无法访问 Google 服务,所以需要借助科学上网软件实现访问。你可以使用你所习惯使用的或下面为你推荐的任意一款软件。为保证正常下载,请复制链接使用迅雷下载。

* 提示:Lantern 免费版限制流量,如果想要购买专业版,使用邀请码 HBNVPW 可获得额外时长。

2、注册 Google/Gmail 账号

点击下面的链接,注册一枚带 @gmail.com 后缀的 Google 账号。

Google 账号注册页面:https://accounts.google.com/SignUp

3、对 Google 账号进行安全设置

Google 账号在默认可能会拒绝将 KindleEar 上传到 GAE,所以需要设置一下。点击下面的链接进入你的 Google 账号“登录与安全”设置页面,找到“允许不够安全的应用”这一项,点击右边的滑动按钮,将其状态切换为“已启用”。注意,为了账号安全,上传完之后建议将此设置恢复为停用状态。

Google 账号设置页面:https://myaccount.google.com/security#connectedapps

4、创建一个 Google Cloud 项目

KindleEar 是免费托管在 Google Cloud 的 Google App Engine(GAE)应用中的,所以你需要先创建一个 Google Cloud 项目,然后再创建一个 GAE 应用。点击下面的链接并用你的 Google 账号登录。

创建 Google Cloud 项目页面:https://console.cloud.google.com

点击页面左上角的“选择项目”,点击弹出对话框右上角的“新建项目”,然后在“新建项目”页面中输入你喜欢的“项目名称”。项目名称可随意填写,只要是你喜欢并且符合它限定的规则即可。

需要着重注意的是项目名称下方的“项目 ID”,这个 ID 也就是我们后面提到的 APPID。默认情况下,系统会根据你输入的项目名称自动生成项目 ID,但是自动生成字符没有意义,为了方便记忆最好是自定义。点击项目 ID 后面的【修改】按钮,将其修改成你喜欢的字符串组合。这样等 KindleEar 部署成功后,你就可以通过 http://APPID.appspot.com 访问了(注意把 APPID 换成你真实的 APPID)。

5、创建 Google App Engine 应用

Google Cloud 创建完成后需要继续创建一个 GAE 应用,否则直接上传会出现下面这样的错误提示:

Error 404: --- begin server output ---
This application does not exist (project_id=u'sample-appid'). To create an App Engine application in this project, run "gcloud beta app create" in your console.
--- end server output ---

所以,当创建完 Google Cloud 项目之后,还需要手动创建一个 Google App Engine 应用。方法有两种:一种是使用云端 Shell 创建;另一种是在 Console 页面上进行。可根据自己的喜好选用。

方法一:上面那个错误提示给出了解决方案,直接在云端 Shell 中使用一行命令就能搞定。具体步骤为:点击页面右上角的 [ >_ ] 图标按钮(如下图所示),调出云端 Shell,输入以下命令按回车:

gcloud app create

命令执行后会出现 Which region would you like to choose? 字样,询问选择应用的位置,在 Please enter your numeric choice: 之后输入数字 1(或其它项),稍等片刻即可完成 GAE 应用的创建。

方法二:点击 Google Cloud 页面左上角的菜单按钮,点击弹出菜单中的“App Engine”。在“您的第一个应用”那里点击“选择一种语言”,选择“Python”。接下来“选择位置”中页面中选择“asia-east2”(或者其它你想要使用的区域,注意此选择是永久性的,一旦选择今后将不可更改)。然后点击下一步,会弹出为当前项目启用结算账号的对话框,点击【创建结算账号】按钮会引导你进入填写结算账号的页面,其实到这一步 GAE 应用就已经创建成功了,不需要填写结算信息也能正常使用,所以可忽略之后步骤。

* 注意:自 2019 年 11 月 30 日起,Google App Engine 将使用 Google Cloud Build 构建 ,而使用 Google Cloud Build 必需关联有效支付账户。也就是说从这天起必需绑定信用卡后才能正常使用 Google App Engine 了。Google Cloud Build 提供了免费套餐,只要构建时间不超过 120 分钟就不会收费,Google App Engine 仍可在不超出免费配额的前提下免费使用。需要特别注意的是,和之前免费额度用完就自动关闭应用不同的是,新政策会在免费额度用完后会自动收取超出免费额度的费用。

6、授权 KindleEar 用 Gmail 发信

默认情况下 KindleEar 没有使用 Gmail 发信的权限,所以你需要在 GAE 的设置中将 Gmail 的发信权限授权给 KindleEar 应用,否则,无法推送成功,日志也会出现 wrong SRC_EMAIL 的提示。

授权步骤很简单,首先在 GAE 中点击菜单中的【设置】进入设置页面,然后切换到【电子邮件发件人】,在“Mail API 已获授权的发件人”添加你的 Gmail 邮箱地址。具体步骤参考以下示意动画:

以上一切准备完毕,就可以进入第二部分的步骤,将 KindleEar 程序到 GAE。

二、上传程序

下面提供了两种上传 KindleEar 程序到 GAE 的方法。方法一是通过 Google 云端 Shell 的方式进行上传,使用书伴提供的 Shell 脚本一条命令就能搞定,完全自动化,强烈推荐使用。方法二是手动配置上网环境、手动输入命令进行上传,步骤较多也较为繁琐。请根据自己的实际情况择优选用。

方法一:自动上传(强烈推荐!)

1、进入 Google 云端控制台:https://console.cloud.google.com/home/dashboard

2、点击右上角的 Shell 图标(如下图所示)激活 Google 云端 Shell。

3、复制下面的代码,粘贴到 Google 云端 Shell(如下图所示),回车执行。

rm -f uploader.sh* && \
wget https://raw.githubusercontent.com/bookfere/KindleEar-Uploader/master/uploader.sh && \
chmod +x uploader.sh && \
./uploader.sh

代码粘贴到云端 Shell 后的效果如下图所示:

* 提示:脚本默认拉取 KindleEar 官方源代码,如果想要指定其它 KindleEar 项目分支(比如想要上传自己修改的源代码)可在 uploader.sh 后指定 Github 源代码的 URL。

4、根据脚本的引导,输入你的“Gmail 邮箱”和“APPID”等信息,等待上传成功即可。需要特别注意的是,一定要再三确认你输入的 Gmail 邮箱是正确的,拼写是无误的,否则无法推送成功。

上面的代码只需要执行一次即可,如果想要重新上传或要更新代码,只需要直接运行 uploader.sh 这个 Shell 文件即可,即在云终端中输入下面这行代码即可:

./uploader.sh

* 提示:此 KindleEar 安装脚本托管在 GitHub:https://github.com/bookfere/KindleEar-Uploader

方法二:手动上传

在开始手动上传部署 KindleEar 步骤之前,你需要保证已完成下面提到的准备工作。对于每一项准备工作,如果你已经具备条件,可忽略继续进行下一项。

[ 展开步骤 ]

1、下载并安装 Python 2.7

Mac OS X 系统可略过此步骤。为保证正常下载,请复制下面的链接使用迅雷下载。

Python 下载:WindowsMac OS X官方页面

2、下载并安装 GAE SDK for Python

为保证正常下载,请复制下面的链接使用迅雷下载。

GAE SDK for Python 下载:WindowsMac OS XLinux官方页面

3、安装配置 SocksiPy

SocksiPy 下载:下载链接官方页面

Mac OS X 无需下载此文件,打开“终端”输入以下命令安装 SocksiPy:

sudo pip install PySocks

*注意,如果提示找不到 pip 命令,请先下载 get-pip.py,然后运行 python get-pip.py 安装 pip。

在 Windows 中,将下载到的 SocksiPy 压缩包解压缩得到文件 socks.py,把这个文件拷贝到 GAE SDK for Python 安装目录,如果你是没有修改安装路径,默认情况下其路径如下所示:

C:\Program Files (x86)\Google\google_appengine

4、为 GAE SDK 配置代理

在 Windows 中,进入 GAE SDK for Python 安装目录,找到文件 appcfg.py,通过右键菜单“Edit with IDLE”,或使用代码编辑软件(如 Sublime Text)将其打开。

在 Mac OS X 中,进入“应用程序”目录,找到并右键点击 GoogleAppEngineLauncher 应用,在弹出的菜单中点击“显示包内内容”,在下面所示的路径中找到 appcfg.py,使用代码编辑器打开。

Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/

找到下面这行代码:

"""Convenience wrapper for starting an appengine tool."""

在它上面添加下列代码:

import socks
import socket
socket.socket = socks.socksocket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 8788)

注意,如果你使用的是 ShadowSocks,请把上面代码中的端口 8788 修改为 1080

修改完毕后保存。

5、下载 KindleEar 源码

点击下面的链接下载 KindleEar 源码。如果你习惯使用 Git,也可以将项目 Clone 到本地。

KindleEar 下载:下载链接项目页面

6、配置 KindleEar 程序

解压缩下载到的 KindleEar 压缩包(如果是通过 Git 的 Clone 命令获取的则不用解压缩),把 KindleEar 的源代码放到你喜欢的地方。为方便演示,在本例中放置的位置如下所示:

Windows 系统中,将其放到了 C 盘根目录,路径为:

C:\kindleear

Mac OS X 系统中,将其放到了用户目录下,路径为:

/Users/YOURNAME/Applications/kindleear

接下来进入 KindleEar 源代码文件夹,按照下表修改文件并保存:

要修改的文件要修改的内容内容修改说明
app.yamlapplication: xxx红色部分修改为你创建的 APPID
module-worker.yamlapplication: xxx红色部分修改为你创建的 APPID
config.pySRC_EMAIL = "xxx@gmail.com"红色部分修改为你创建应用的 Gmail 邮箱
DOMAIN = "https://xxx.appspot.com红色部分修改为你创建的 APPID

注意!一定要再三确认 SRC_EMAIL 参数值是正确的 Gmail 邮箱,拼写是无误的,否则无法推送成功。

7、上传 KindleEar 程序

快捷键 Win + R 调出“运行”对话框,输入“CMD”回车打开命令提示符,然后使用 cd 命令进入 GAE SDK for Python 安装目录。

在 Windows 系统中,如果你是没有修改安装路径,应该是输入以下命令(小窍门:输入 cd 后,把 google_appengine 文件夹拖到命令提示符上):

cd C:\Program Files (x86)\Google\google_appengine

分别输入下面两条命令将 KindleEar 上传到 GAE:

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

在 MAC OS 系统中,打开“终端”,分别输入下面两条命令上传 KindleEar:

appcfg.py update ~/Applications/kindleear/app.yaml ~/Applications/kindleear/module-worker.yaml
appcfg.py update ~/Applications/kindleear

出现“Email”提示,输入你的 Gmail 邮箱地址,回车;出现“Password for xxx@gmail.com”,输入你的 Gmail 邮箱密码(密码输入时不显示),回车。

等待上传。在上传的过程中,如果第一次上传,会出现一个许可验证消息,如果是同一个电脑,直接打开链接验证即可。如果是不同的电脑,需要添加参数 --noauth_local_webserver,打开链接获取验证码,填写验证。

注意,--noauth_local_webserver 后缀是添加到 appcfg.py 后面,如下所示:

python appcfg.py --noauth_local_webserver ...

三、设置推送

1、访问应用

打开浏览器输入 http://你的APPID.appspot.com 可访问你搭建的 KindleEar。

注意,由于 appspot.com 需要科学上网才能访问,如果嫌每次都这样访问麻烦,可以按照文章《给 KindleEar 绑定可直接访问它的免费顶级域名》介绍的方法,为其绑定一个免费的顶级域名。

KindleEar 初始登录名和密码都是“admin”,建议登录后立即改成新密码。登录 KindleEar 后你会发现以下几个选项卡,你可以在这里增减 RSS 、查看推送记录或根据自己的需要进行一些个性化的设置:

2、添加订阅

登录应用后,可以点击导航上的“我的订阅”进入订阅页面,在这里在这里可以添加自定义的 RSS 地址。也可以在下方预置的一些订阅里选择自己感兴趣的。

在添加自定义 RSS 地址的时候请注意。KindleEar 仅支持 RSS/ATOM 格式的订阅(XML 格式),如果遇到添加的自定义 RSS 无法成功推送,请留意是否是格式错误导致的。

比如有些 FeedBurner 烧制的 RSS 默认是 HTML 格式(可以通过查看源代码辨别),直接添加这种 RSS 地址不能成功推送,需要在添加的 RSS 地址后面添加一个参数 ?format=xml?fmt=xml 才行。

3、设置推送

添加完订阅后,还需要设置一下推送。点击导航上的“设置”进入 KindleEar 的设置页面。在这里填写接收推送的“Kindle 邮箱”,选择投递日,所选投递日的投递时间,建议勾选“多本书籍合并投递为一本”、“使能自动定时投递”、“自动定时投递自定义 RSS”。同时还可以在“书籍标题”项填写显示在 Kindle 里的个性名称。当所有设置完后还可以点击“现在投递”测试一下。

4、投递日志

每次投递的记录。

5、账户管理

可以添加多用户,更改密码等。

6、高级设置

有手动推送订阅功能即“现在投递”,有邮件白名单、归档和分享、URL 过滤、封面图片设置。

7、网友分享

你可在此页面一键订阅他人分享的 RSS。当然你可以在“我的订阅”把自己 RSS 分享给他人。

OK,全部步骤结束。在你的 Kindle 处于联网状态时,这个你亲手建立的推送服务器,就会按照你设置的时间定时把精美的电子杂志推送到你的 Kindle 上了!Enjoy it!

四、常见问题

很多小伙伴在安装和使用 KindleEar 的过程中会遇到一些问题,这些问题很常见也很好解决,所以书伴将这些问题整理归纳如下。如果你遇到了新的问题也可以留言提出。

1、登录出现 Invalid username or password

如果确认输入的账号密码正确却仍然出现“Invalid username or password.”,请点击这里检查一下相关选项。首先找到“允许不够安全的应用”这个选项,确认是“已启用”状态。然后查看下账号登录是否被 Google 拦截,把可疑操作确认是自己操作,然后重新运行 uploader.bat 走一遍过程。如果取消拦截后还是出现“Invalid username or password.”这样的提示,请先使用浏览器登陆你的 Google 账号,看是否会有短信验证等提示,登录成功后重新运行 uploader.bat 走一遍过程。

2、无法为其它 Google 账号上传程序

当为一个 Google 账号下的 GAE 上传 KindleEar后,程序会自动记录登陆邮箱密码,这样使用其它账号就无法上传了。想要切换帐号,Windows 系统请前往目录“C:\用户\你的用户名\”下删除“.appcfg_cookies”,然后重新运行 uploader.bat。Mac 或 Linux 系统遇到同样问题,使用命令 rm ~/.appcfg_oauth2_tokens 删除。

3、访问页面提示 internal serve error

如果是刚上传完 KindleEar,由于 GAE 需要一些时间索引数据,在此期间访问某些页面会出现“internal serve error”的错误提示,最长等待十来分钟即可正常访问。

如果等待很长时间仍然出现“internal serve error”,请尝试这样操作:点击 Google Cloud 左上角的菜单按钮,点击弹出菜单中的“数据存储”,再点击数据存储页面左侧导航中的“索引”进入索引页面。

查看一下 Book、DeliverLog、Feed 三项的状态,如果是绿色对勾则正常,否则就需要重新索引一下。具体操作为,进入 KindleEar 目录,运行下面这条命令更新一下索引:

$ python appcfg.py update_indexes ./

注意,如果使用的是 Google 云端 Shell 直接使用 appcfg.py 命令即可:

$ appcfg.py update_indexes ./

待索引状态全部变成“使用中”后,也就是每一项都变成绿色对勾,即可正常访问。

4、投递状态显示 wrong SRC_EMAIL

默认状态下 GAE 不允许发信,所以才会出现 wrong SRC_EMAIL 的提示,你需要设置一下把 Gmail 邮箱地址添加到“Mail API 已获授权的发件人”,这需要在 GAE 应用的设置中进行。

▲ 向 GAE 设置中添加 Gmail 邮箱示意动画

首先访问下面这个网址进入 GAE 应用设置(将其中的 APPID 换成你真实的 APPID):

https://console.cloud.google.com/appengine/settings/emailsenders?project=APPID

* 也可以点击左上角的菜单,在弹出的菜单中点击“App Engine”,然后再点击 APP 引擎页面左侧的“设置

切换到“电子邮件发件人”,看一下“Mail API 已获授权发件人(Mail API authorized senders)”账号里面有无添加发送邮箱地址,如果没有就点击上方的“添加”按钮或“添加已获授权的电子邮件发件人”按钮添加一下邮箱地址,注意添加完后要按回车确认一下,最后点击“添加”,此问题即可解决。

如果确认添加了正确邮箱,却仍然出现 wrong SRC_EMAIL 错误,就需要检查一下 KindleEar 配置文件 config.py 中的 SRC_EMAIL 参数,确保填写的是【拼写正确】的 Gmail 邮箱。

▲ 仔细检查源代码 config.py 中的 SRC_EMAIL 参数

5、忘记 KindleEar 的登录密码怎么办

忘记密码可以进入 GAE 重置密码,具体方法为:访问 https://console.cloud.google.com,点击左上角的菜单,点击菜单中的“数据存储”,然后在“按种类查询”的标签项下方的“种类”中,选择“KeUser”,最后点击用户记录“名称/ID”,编辑其中的 passwd,改成 e10adc3949ba59abbe56e057f20f883e,最后点击【保存】按钮保存一下,这样就把密码临时改成了123456,登录账号修改成新密码即可。

6、能否请书伴代为部署 KindleEar

如果你懒得自己部署,只想直接使用现成的程序,可以前往书伴的“捐助”页面扫码支付 50 元,注意备注你的 Gmail 地址,然后把你的 Gmail 账号和密码到 通知书伴即可。

* 注意!软件本身是开源的,本文已经提供了详尽的安装方法,如果你因为某种原因需要让书伴代为部署,请明确一点,你为之支付的,是书伴为你部署 KindleEar 而付出的时间,而非软件本身。之所以有此提示是因为有人对此有质疑

五、其它事项

上文已将 KindleEar 的部署步骤和使用方法详细列出,一般情况下你只需要按照步骤一步步操作就能部署成功。如果遇到问题,请访问 KindleEar 项目提供的常见问答(FAQ)。那里可以解决你在安装 KindleEar 时遇到的绝大部分问题。如果 FAQ 没有解决你的问题,可以自行搜索看是否有可行办法。

实在解决不了可以点击这里向开发者提交一个“New issue”请求解答,也可以在本页留言请求帮助。

另外,如果你觉得 KindleEar 这款软件还不错,可以点击这里捐赠一下作者 cdhigh。

六、自制订阅

如果你想推送的内容不提供 RSS 供稿,并且 KindleEar 内置的订阅也不能满足你的需求,建议尝试通过下面这三篇文章提供的方法自制 KindleEar 抓取脚本,教程面向没有编程基础的小伙伴。

1、如何用 KindleEar 推送无 RSS 的网站内容(上篇)

本文是如何用 KindleEar 推送无 RSS 的网站内容的上篇。对 KindleEar 抓取网站内容的两种方式以及 KindleEar 的抓取脚本做了必要说明,并提供了 KindleEar 调试环境的搭建步骤。

2、如何用 KindleEar 推送无 RSS 的网站内容(中篇)

本文是如何用 KindleEar 推送无 RSS 的网站内容的中篇。详细介绍了 KindleEar 订阅脚本的工作原理,对订阅脚本的编写过程做了详细分解说明,最终实现从网站抓取文章并转换成电子书。

3、如何用 KindleEar 推送无 RSS 的网站内容(下篇)

本文是如何用 KindleEar 推送无 RSS 的网站内容的下篇。完善了上篇编写订阅脚本,使其可处理文章列表和内容的翻页,以及抓取符合设定条件的文章条目,最后介绍了上传 KindleEar 的两种方式。

有帮助,[ 捐助本站 ] 或分享给小伙伴:

发表评论

标注为 * 的是必填项。您填写的邮箱地址将会被保密。如果是在本站首次留言,审核后才能显示。
若提问,请务必描述清楚该问题的前因后果,提供尽可能多的对分析该问题有帮助的线索。

小伙伴们发表了 717 条评论

  1. 从前天起,我的kindle 突然无法收到推送了,但是之前都是正常的,而且我看投递日志也显示ok,就是没收到推送。

    • 登录亚马逊账户,在“我的内容”页面把“显示”选择为“等待发送”,看一下有没有待推送的队列?

        • 投递日志 OK,认可列表也没问题,可能就是意外情况了。建议手动推送几次测试一下,顺便看看 GAE 日志有没有异常,在测试之前,先重启一下 Kindle 让它重新联网。

  2. 设置为8:00推送,实际推送时间7:05,状态为OK,当时Kindle开启了飞行模式,后来10点多钟关闭飞行模式仍未收到,最后手动推送,请问如何解决?
    (按说亚马逊服务器会暂存推送,直到Kindle联网后再发送)

    • 推送时间有误建议检查 Kindle 设置中的时区,确保是 GMT +8:00。

      推送时如果 Kindle 没联网,亚马逊服务器确实会在联网后重新尝试推送,感觉你遇到的情况可能是个意外,建议重复测试几次,以排除可能的意外情况。

    • nonews 有两种情况,一种是订阅的内容没有更新,另一种是订阅的脚本有问题,这可以在 Google Cloud 的日志中看到。

      over quota 是指你用完了 GAE 的免费额度,这通常是因为推送了过多次导致的。需要等待 24 小时后(美国时间)额度重置之后才能再次正常使用。

        • 错误提示出现这个
          Traceback (most recent call last):
          File “/base/data/home/apps/b~ultra-tube-251202/worker:1.420628198328568986/apps/Work/Worker.py”, line 399, in push_comic_book
          ) in book.gen_image_items(img_list, chapter_url):
          File “/base/data/home/apps/b~ultra-tube-251202/worker:1.420628198328568986/books/base.py”, line 1456, in gen_image_items
          “Failed to download %s: code %s” % url, result.status_code
          TypeError: not enough arguments for format string

          • 看起来是脚本有问题。从错误提示看,应该是在格式化字符串时缺失了某个参数。建议检查订阅脚本中 gen_image_items() 函数相关的代码。

  3. 搭建成功,刚刚测试了一下,有几个疑问:
    1.在gae里vi修改config.py文件是在当前目录重新运行uplod文件生效吗
    2.关于自定义rss源的无论选择是否合并为一本书籍,都会合并成一本kindleEar推送,为什么
    3.是否有办法使所有的自定义rss源通过翻墙转发器转发,已勾选翻墙选项,不生效

    最后感谢书伴,感谢博主的分享。

    • 1、是的。要想使修改后源代码生效,就需要在每次修改后重新上传源代码。
      2、“自定义 RSS”始终都是合并在一起的,“多本书籍合并投递为一本”这个选项其实指的是把自定义 RSS 和内置订阅合并在一起的意思。如果你需要某个 RSS 源单独推送,建议在 KindleEar 的 books 文件夹中添加订阅脚本。
      3、如果你指的是“归档和分享”中的选项,可能你误会了它的用途。在这里它只是个 URL 转发器,和 RSS 源的获取没什么关系,FAQ 里对此功能有解释。

      如果你想要让自定义 RSS 使用转发器,首先你需要自己搭建一个转发服务器了,KindleEar 自带的那个应该是失效的。然后在使用的时候,有两种方法使用转发 URL,要么通过源代码修改 Feed 地址(如存储自定义 RSS 的 Subcribe.py 或处理 Feed 的 Worker.py),要么添加自定义 RSS 时候直接填写转发 URL。

      • 十分感谢您的回复!
        前两点已经没有疑问了。
        但关于第三点,我是搭建了转发服务器的(国内vps),而且通过监听log是可以看到请求的,但测试发现默认订阅源里只有知乎日报走了转发器,所以我不明白那个翻墙选项的勾选与否有何意义。

        • 上一条回复说过了:“归档和分享”中的翻墙选项,只是用来转发分享链接 URL 的,和 RSS 源的获取没有关系。

          默认的知乎日报订阅使用了转发器,是因为订阅脚本里进行了转发设置。在订阅脚本里转发相关的代码如下所示:

          class ZhihuDaily(BaseFeedBook):
              #...
              def url4forwarder(self, url):
                  ' 生成经过转发器的URL '
                  return SHARE_FUCK_GFW_SRV % urllib.quote(url)
                  
              def ParseFeedUrls(self):
                  #...
                  url = self.url4forwarder(self.feeds[0][1])
                  #...
          • 明白了,原来是分享链接,代码部分配置转发器的时候已经看过,我只是疑惑那个翻墙选项的作用。
            感谢回复。

  4. 你好,我在亚马逊已添加gmail,Engine我也添加了gmail,在kindle’s Ear中也添加了gmail(三个同个邮箱)。问题日志显示:投递状态显示 wrong SRC_EMAIL。为什么?

        • 如果确认设置无误,就需要【仔细检查】你在 GAE 设置添加的邮箱和 KindleEar 配置的邮箱(设置页面保存按钮上方显示的邮箱)是否是一致的,确保没有失误的输入。之前有网友因为其中两个字母顺序输错导致出现了这个问题。

          • 如果这样子还不行,是不是我有毒?如果方便的话,您能否用邮件回复我,因为评论无法发图,非常感谢。

            • 可以。你可以截图一下 KindleEar 设置页面和好GAE 配置页面,然后发给书伴邮箱。书伴邮箱在本站页面底部“联系”处获取。

  5. 书伴你好,我按照教程到了第三步设置推送使用默认密码登录不进去该怎么解决?

  6. 你好。请问EAR搭建好了,自定义RSS无法推送怎么弄,像网站有提供RSS的可以直接使用吗

    • 只要是可用的是 RSS 源都可以使用。无法推送的表现是什么?日志显示 nonews 吗?建议把问题描述具体一些。

  7. 书伴你好,创建 Google App Engine 应用需要注册结算账户吗?云端 Shell 中命令创建好像成功不了么?如果需要注册结算账户,应该怎么操作,程序小白一名,谢谢了。

      • 我现在访问不了我的http://APPID.appspot.com ,所以怀疑是GAE没创建成功。但是代码提示我输入邮箱地址和APPID了。也打开了“允许不够安全的应用”这一项。我没发现什么问题,FQ也能成功,就是访问不了appspot网址

  8. 后端实例是什么,免费的9小时,我怎么用超了,有什么影响吗,请问怎么减少?

    • KindleEar 的前端实例是 default,后端实例是 worker。用超了当天就不能用了,配额每 24 小时重置一次,重置时间点是美国时间零点。你都做了什么操作呢?正常使用应该是不会超额的。

      • 我也不太清楚,因为我的kindleEar好像不能自动推书,我一直在手动推书,添加一个订阅源推一次,中间也打开过几次Googlecloud,点过crob作业里面的立即执行,反正就是我想解决怎么自动推书。

        • 那可能就是这些操作导致的了。对于 KindleEar 来说,只要开启了“使能自动定时投递”就表示可以按照你设置的时间自动推送了,至于无法成功自动推送,问题一般出在订阅源上,这就需根据日志来排查问题了。

  9. 书伴您好,想请问一下打开Google cloud shell 时(右上角的>-),一致处于正在连接状态,输入不了代码,请问有什么解决办法嘛

    • 这应该是网络连接的问题。如果你使用的代理不是全局的,可以设置成全局试试。如果还不行可能就需要更换代理了。

        • 如果自动上传脚本没有提供修改选项,就需要手动拉取代码自行修改。

          以本文提供的脚本为例,第一次上传之后会留下源代码,直接在云端 Shell 中用 vi 命令修改源代码中的配置文件,然后再次运行脚本,选择不更新源代码上传就可以了。

          根据这个需求,稍候我会更新一下自动上传脚本,让它可以可以询问式修改一些配置。除了灰度之外,如果还有其它需要修改的配置选项,请留言提示。

  10. 书伴您好!我根据您的教程成功部署了Kindle Ear, 非常感谢您和程序作者!但是有个问题,为什么我订阅的部分RSS源没有输出呢?该怎样查询日志?

    • 如果你指的是在 GAE 查看日志,可以点开页面左上角的菜单,在菜单中找到日志菜单项。RSS 的输出问题一般可以在日志中找到具体原因。

  11. 您好,我根据您的教程搭建了kinddlear,但是在测试投递时一直存在“wrong SRC_EMAIL”,即使多次删除添加并且确认电子邮箱地址,仍然无济于事,请问要怎么解决啊,谢谢您

    • GAE 有免费限额,个人使用一般不会超出这个限额。如果担心会产生费用,可以在 GAE 的设置中,修改“应用设置”,把“每日支出限额”修改为 0 美元即可。