Calibre 非主流需求的实现方式

calibre home tag

记录了使用 Calibre 管理电子书过程中的一些小众需求和实现,包括使用代理、自定义元数据、搭建 Web 服务……

我认为 Calibre 是目前能够找到的最强的电子书阅读、管理和格式转换软件。它不仅拥有跨平台的桌面端,还提供了大量扩展功能,可定制性极高。大部分自定义功能的实现都可以参考 FAQ官方文档

使用代理

某些特定的元数据下载源需要使用代理才能访问。Calibre 的 UI 中并不包含使用代理的选项,但根据文档,它是支持 HTTP 代理的,只需要设置系统的环境变量 http_proxyhttps_proxy 即可。

设置好后可以在 Calibre 首选项的杂项面板中看到当前所使用的代理地址。

多个作者

许多书籍包含多个作者,但如果简单地在作者字段使用“和”或者“and”来连接多个名字,那么这个字段就会被识别为一个新的作者名,在按作者筛选书籍时会产生不便。

事实上,根据文档,Calibre 是支持多个作者的解析的:

When a book has multiple authors, separate their names using the & character.

也就是说,只需要使用 & 作为分隔符,就能够实现完美的多作者管理效果。

Portable 版的默认书库位置

在 Windows 上,Calibre 提供了便携式的 Portable 版程序,解压即用,用户数据全部包含在软件目录下,非常方便。但 Portable 版存在一个限制:

calibre Portable only remembers libraries that are placed inside the portable folder. So while you can open any library located anywhere on your computer with calibre Portable, it will not be remembered on restart unless it is located in the portable folder (i.e. in the same place as the “Calibre Library” folder).

也就是说它默认打开的 Library 位置一定是 calibre-portable.exe 同目录下的 Calibre Library 文件夹,且不支持修改。所以,如果想要将便携版的程序和书库数据分离的话,只能采用曲线救国的方案:在程序目录下创建一个名为 Calibre Library符号链接,链接到想要使用的书库文件夹。

自定义栏目(元数据)的自动生成

在 Calibre 中,每本电子书都包含许多信息字段,如“书名”、“作者”、“出版商”等等,它们都被称为“元数据”。在 UI 界面中,这些元数据所对应的列被称为“栏目”,可以在首选项的“添加栏目”面板中进行管理。

在添加自定义栏目时,可以快速添加一些预置的元数据,比如“ISBN”。我们选择添加 ISBN 栏目后,可以看到它的 “Column type”是“从其它栏目生成的新栏”,“模板”中填写的是 {identifiers:select(isbn)}。这里所使用的语法实际上是 Calibre 自定义的 calibre template language。使用类似的方式就可以自动生成一些我们想要的栏目(元数据)。

使用场景示例:“作者国籍”栏目

一些中文的元数据下载源会在外国作者的名字前面添加国籍信息,类似于“[英] 亚当·斯密”这样的形式。在某些场景中,我们希望筛选特定国籍作者的书籍,仅仅搜索“作者”栏目中的特定字段显然有所不便。这时,我们就可以添加一个自定义栏目,其“Column type”为“从其它栏目生成的新栏”,“模板”如下:

{:'contains(field('author'), '\[', re(re(field('author'), '\].*$', ''), '\[', ''), '')'}

这个模板使用正则在“作者”栏目中提取了中括号里的国籍。如果使用其他格式来表示国籍信息,需要对正则表达式做相应的修改。考虑到实用性,如果电子书存在多个作者,这个模板只会解析首个作者的国籍。

Calibre-Web

Calibre 的桌面客户端自带一个内容服务器,可以在本地架设一个查看库存电子书的 Web 服务。但无论是美观程度还是功能性,它都不如第三方开发的 Calibre-Web 项目

Calibre-Web 不依赖原始的 Calibre 程序,它只负责对 Calibre 所生成的 Library 进行解析,支持按元数据筛选、在线阅读、下载电子书,甚至支持直接在 Web 端修改书籍的元数据、对电子书文件进行格式转换、一键推送到 Kindle 等等功能。

推荐的部署方式是 Docker,可以一键在 VPS 或树莓派等设备上部署。Docker Hub 上有很多基于此项目制作的镜像,作者推荐的镜像有两个:technosoft2000/calibre-weblinuxserver/calibre-web。为了与项目的最新版本保持一致,这两个镜像都会在首次运行时从 GitHub 拉取仓库的最新文件,然而在国内的网络环境下,这个操作大概率不能成功,或者需要耗费大量的时间。为此,可以采用其他自带程序文件的镜像,如 ctiself/calibre-web,但这些镜像往往长期不更新,程序版本老旧,导致不能解析最新版 Calibre 客户端的书库。因此,建议仍然使用 technosoft2000/calibre-web 这样的镜像,同时提前在主机中使用代理 clone 好 GitHub 仓库,然后将程序目录映射进容器中。具体命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mkdir ~/calibre-web && cd ~/calibre-web
# 预先使用代理下载好各组件
proxychains4 git clone https://github.com/janeczku/calibre-web.git
mv calibre-web app
mkdir kindlegen && cd kindlegen
proxychains4 wget https://github.com/Technosoft2000/docker-calibre-web/releases/download/kindlegen/kindlegen_linux_2.6_i386_v2_9.tar.gz
gunzip kindlegen_linux_2.6_i386_v2_9.tar.gz
tar -xf kindlegen_linux_2.6_i386_v2_9.tar
rm kindlegen_linux_2.6_i386_v2_9.tar

docker run -d --name=calibre-web --restart=unless-stopped \
-v path/to/library:/books \
-v ~/calibre-web/app:/calibre-web/app \
-v ~/calibre-web/config:/calibre-web/config \
-v ~/calibre-web/kindlegen:/calibre-web/kindlegen \
-e USE_CONFIG_DIR=true -e SET_CONTAINER_TIMEZONE=true -e CONTAINER_TIMEZONE=Asia/Shanghai -e PGID=65539 -e PUID=1029 \
-p 8083:8083 \
technosoft2000/calibre-web

使用 Calibre-Web,再配合网盘和 rclone 等同步工具在本地计算机和服务器间同步书库目录,就能够搭建一个自己的在线电子书管理和分享平台啦。

-------------本文结束    感谢您的阅读-------------
0%