最近,亚马逊为 Kindle 添加了一个给大家添堵的功能,那就是,把通过 USB 拷贝到 Kindle 的电子书封面/缩略图显示成了带有“暂无图片”字样的图片占位符。
以往仅显示电子书标题的图片占位符,虽然没有真正的封面那样美观,但至少能让人分辨是哪一本书,而新图片占位符则是无法分辨到底想要看哪一本书,要找一本想看的书就像开盲盒一样。
问题分析
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
信息头中 501
、113
、504
这三个记录类型来实现。
这里我们需要使用到名为 Mobi Metadata Editor 的小工具,Mobi Metadata Editor 是单文件程序,无需安装,下载下面的压缩包解压即可用:
下载地址:百度网盘〈提取码 : 15ks〉
注意!运行 Mobi Metadata Editor 需要确保你的操作系统安装了 JRE(Java Runtime Environment)或 JDK(Java Development Kit)。如已安装可略过此步,如未安装,可以在下面提供的链接中,任选其一下载安装。如果不是以 Java 开发为目的,推荐安装体积更小的 JRE。
- JRE:官方下载页面 | 手动选择适用操作系统的版本
- JDK(Standard Edition):官方下载页面
- OpenJDK:官方下载页面
双击 MobiMetaEditorV0.16.jar 启动程序,我选择一个封面失效的.azw3
文件为例:
此时我们发现文件的元数据中只有113
和501
类型的记录,113
对应的是亚马逊 Kindle 电子书商店的电子书的 ASIN
。我们保持 501
类型记录的值为 EBOK
不变,仅更改电子书文件的 ASIN
记录,这里直接修改为美亚 Kindle 电子书商店的对应电子书的ASIN
(测试中发现中亚的部分书籍ASIN
也不好使),这样 Kindle 就会将商店中电子书的封面拉取下来给本地的电子书使用。
- 中亚 Kindle 电子书商店:https://www.amazon.cn/kindlestore
- 美亚 Kindle 电子书商店:https://www.amazon.com/kindlestore
若是发现修改
113
类型记录的值无效,则点击+
可以添加504
记录类型,然后将电子书商店对应电子书的ASIN
的值添加。
注意:电子书文件的
ASIN
记录可能同时存在于113
和504
这两个记录类型中,两者至少保留一个才能生效,如果对两者同时存在,Kindle 会优先使用504
的值。
我这里是修改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′○),希望能一直坚持下去。
我们简单进行注册之后,既可以进行推送设置了:
绑定Kindle之后,我们需要添加你想要推送的RSS订阅源,网站提供了一些精选的RSS订阅源,你也可以根据自己的兴趣进行选择。
添加订阅源之后可以在我的订阅里进行查看:
点击“立即推送”可以推送近期文章,大约5~6分钟后在Kindle上点击同步就可以接受到推送的文章了,点开后大约是这个样子:
这里,我也分享一些优秀的订阅源网站,感兴趣的也可以自建 RSSHub 服务: