遇见时光

Keep Looking , Don't Settle
Stay Hungry , Stay Foolish

解决Kindle电子书"暂无图片"问题及RSS订阅推送

rocky

最近,亚马逊为 Kindle 添加了一个给大家添堵的功能,那就是,把通过 USB 拷贝到 Kindle 的电子书封面/缩略图显示成了带有“暂无图片”字样的图片占位符。


以往仅显示电子书标题的图片占位符,虽然没有真正的封面那样美观,但至少能让人分辨是哪一本书,而新图片占位符则是无法分辨到底想要看哪一本书,要找一本想看的书就像开盲盒一样。

rocky


问题分析

Kindle 电子书有多种类型,它们被标记在电子书文件的 EXTH 信息头[1]中,即类型为 501 名为 CDE Type 的记录。该记录常见的值有 PDOC(代表个人文档)、EBOK(代表电子书)及 EBSP(代表电子书样章)。


通常,我们通过 KindleGen 转换成 MOBI 格式的电子书文件,以及邮箱推送到 Kindle 个人文档服务的文件会被标记为 PDOC,从 Kindle 电子书商店购买的电子书、或通过 Calibre 转换的 AZW3 电子书格式会被标记为 EBOK,而向 Kindle 发送的电子书样章会被标记为 EBSP


对于不同的电子书类型,Kindle 可能会采用不同的处理机制,比如本文讨论的封面被替换成“暂无图片”图片占位符的问题,就是针对标记为 EBOK 的电子书文件的。当这种类型的电子书放入 Kindle 设备中,一旦联网,Kindle 在确认是 EBOK 类型的电子书文件后,就会尝试读取另一个类型为 113(或 504)名为ASIN[2] 的记录,一旦发现该记录的值与亚马逊商品的唯一识别码不匹配,该电子书的封面就会被替换成带有“暂无图片”字样的图片占位符。


解决方法

我这里使用的方法是,可以直接删掉电子书的 EBOK 记录,让 Kindle 忽略封面检查,使其显示带标题的图片占位符;也可以将 ASIN 更改成任一真实存在于 Kindle 商店的ASIN,以达到欺骗 Kindle 使其抓取与该 ASIN 相对应电子书的封面图片的目的。


1. 为电子书文件指定真实的ASIN

主要是通过修改电子书文件 EXTH 信息头中 501113504 这三个记录类型来实现。

这里我们需要使用到名为 Mobi Metadata Editor 的小工具,Mobi Metadata Editor 是单文件程序,无需安装,下载下面的压缩包解压即可用:

下载地址:百度网盘〈提取码 : 15ks〉


注意!运行 Mobi Metadata Editor 需要确保你的操作系统安装了 JRE(Java Runtime Environment)或 JDK(Java Development Kit)。如已安装可略过此步,如未安装,可以在下面提供的链接中,任选其一下载安装。如果不是以 Java 开发为目的,推荐安装体积更小的 JRE。


双击 MobiMetaEditorV0.16.jar 启动程序,我选择一个封面失效的.azw3文件为例:

rocky

此时我们发现文件的元数据中只有113501类型的记录,113对应的是亚马逊 Kindle 电子书商店的电子书的 ASIN。我们保持 501 类型记录的值为 EBOK 不变,仅更改电子书文件的 ASIN 记录,这里直接修改为美亚 Kindle 电子书商店的对应电子书的ASIN(测试中发现中亚的部分书籍ASIN也不好使),这样 Kindle 就会将商店中电子书的封面拉取下来给本地的电子书使用。

若是发现修改113类型记录的值无效,则点击+可以添加504记录类型,然后将电子书商店对应电子书的ASIN的值添加。

注意:电子书文件的 ASIN 记录可能同时存在于 113504 这两个记录类型中,两者至少保留一个才能生效,如果对两者同时存在,Kindle 会优先使用 504 的值。

rocky

rocky

我这里是修改113记录的值无效,所以添加对应504记录的值,然后将修改的文件放到Kindle中,发现封面显示正常。


2. 禁止Kindle检查电子书封面

如果你不在意电子书是否显示封面图片,可以接受仅带图书标题的图片占位符,则可以直接删掉 501 记录类型。这做法都可以禁止让 Kindle 为该电子书检查封面图片。


3. 让 Kindle 从电子书读取封面

对于标记为个人文档的 MOBI 格式电子书,Kindle 会直接从电子书中读取封面,而不会去亚马逊服务器上对比 ASIN。因此可以先将电子书文件的扩展名从.azw3 更改为 .mobi(如果原来不是此格式的话),然后将电子书的 501 记录类型值从 EBOK 改为 PDOC


RSS订阅推送

原来我使用的是Google App Engine(GAE)的方案搭建KindleEar的方式推送RSS订阅到Kindle,设置大约每周推送一次。但是,自 2019 年 11 月 30 日起,必须向 Google Cloud 的结算账户添加支持美元支付的信用卡(如 Visa、MastCard 等)才能正常使用 GAE。奈何自己没有美元结算的信用卡(╯‵□′)╯︵┻━┻,所以此推送服务就一直处于停滞中,等到工作后办一张有美元结算的信用卡在填坑把( ̄▽ ̄)*。


现在我使用WhereMyLife进行RSS订阅推送,是完全免费的,站长用爱发电啊(○` 3′○),希望能一直坚持下去。

rocky


我们简单进行注册之后,既可以进行推送设置了:

rocky


绑定Kindle之后,我们需要添加你想要推送的RSS订阅源,网站提供了一些精选的RSS订阅源,你也可以根据自己的兴趣进行选择。

rocky

添加订阅源之后可以在我的订阅里进行查看:

rocky


点击“立即推送”可以推送近期文章,大约5~6分钟后在Kindle上点击同步就可以接受到推送的文章了,点开后大约是这个样子:

rocky


这里,我也分享一些优秀的订阅源网站,感兴趣的也可以自建 RSSHub 服务:

大爷,赏点?