这些年书没看几本,到处搜刮整理的电子书资源却达到了惊人的 1T 多,检索和查找书籍成了一个头疼的问题。书可以不看,但不能没有,于是开启了庞大的电子书整理之旅。

1. 下载

所有书籍资源都存放在百度网盘里,想靠百度那点小水管不知道要下载到何年马月,于是充值了 SVIP,期间却因为各种文件名过长、违规资源等等导致了很多文件下载失败,修复路径以及在线解压再下载等手段,陆陆续续花了 2 天时间才下载好,但也舍弃了不少“违规”资源,多少还是有一点遗憾。

2. 解压和清理

下载完后用 C# 写了个控制台应用递归遍历解压了各类 zip 以及清理了空文件夹和脏文件(比如百度网盘生成的 .downloading 文件),然后利用 dupeGuru 扫描清理了重复文件。

3. 导入 Calibre

Calibre-Web 的运行依赖于 Calibre 生成 metatde.db 的数据库配置文件,所以先在电脑上安装 Calibre,然后在群晖里新建一个文件夹用于 Calibre 应用目录,最后作为远程文件夹挂载到本机供 Calibre 使用,切记赋予这个文件夹 Everyone 读写权限。

所有书籍导入 Calibre 是一个极度漫长的过程,耗时数十个小时,因为每本书都需要读取元数据生成封面等信息,暂时没有找到快速导入的方法。此外在以 从文件夹和子文件夹添加书籍 方式批量导入书籍时,提示 多文件图书? 对话框,不同的选项,结果也不同:

原始文件夹如下,共 6 本书籍,其中 3 本是包含多种格式(mobi + epub + azw3):

  • 选择 ,导入了 4 本
  • 选择 ,成功导入了 6 本

从结果看,选择“否”之后导入了全部书籍,是我们想要的结果,官方是这样描述这个功能的:

Calibre 假设每个文件夹包含一本书。一个文件夹中的所有电子书文件都假定是同一本书,只是格式不同。

4. 安装 Calibre-Web

网上流行的一些教程都是推荐 technosoft2000/calibre-web 这版 Docker 镜像,功能全面。但经过我安装测试后发现了一些问题,比如单独进行格式转换或者邮件推送 Kindle 是没问题的,但是两者一旦结合,转换并推送 Kindle 时就会失败,翻看了源码,发现在处理邮件发送时,获取待发送的书籍路径多了一层,导致找不到文件。此外还有豆瓣获取元数据的 API 失效,经常卡死,镜像作者也指出没有时间维护了,遂放弃。最终选择了 linuxserver/calibre-web,并完美解决了各种问题。

群晖 Docker 创建容器很简单,基本一路 Next 就可以跑起来了,也可以参考这篇教程

5. 添加格式转换功能

linuxserver/calibre-web 版本镜像没有书籍转换功能,需要在创建容器时新增环境变量 DOCKER_MODS=linuxserver/calibre-web:calibre,切记一定是创建容器时添加,如果创建后再添加,大概率会失败。
启动后登录 Calibre-Web,在权限管理 -> 扩展程序配置 -> Calibre 电子书转换器路径 填写 /usr/bin/ebook-convert,保存即可。

6. 设置正确的时区

新增环境变量 TZ=Asia/Shanghai 重启容器即可。

7. 添加新的豆瓣 API

新版 Calibre-Web(0.6.14)移除了 douban-api,国内不科学上网的话无法搜索书籍的元数据,网上找到一个解决方案:calibre-web-douban-api,复制 src/NewDouban.pycalibre-web/cps/metadata_provider/ 目录下,重启项目即可。
也可以直接下载后通过 Docker 的卷映射挂载到 /app/calibre-web/cps/metadata_provider/NewDouban.py 目录即可,效果是一样的。

8. 开启在线阅读功能

linuxserver/calibre-web 版本默认没有开启该功能,前往 权限管理 编辑对应用户权限,勾选 查看书籍 选项即可。

9. 配置 Kindle 推送

首先进行 SMTP 邮件服务器设置,具体可以参考邮箱服务商的帮助文档,比如我用的 QQ。然后前往亚马逊管理我的内容和设备 -> 首选项,获取对应设备的 Kindle 邮箱地址,并设置发件人白名单。最后在 Calibre-Web 里 接收书籍的Kindle邮箱地址 填写即可。

Calibre 最近刚开始折腾,很多地方还不是很熟悉,需要慢慢摸索,不过现阶段的成果满足个人需求了。