对于喜欢读书的人来说,难免电子书会越来越多,通常使用超大的存储空间和目录分类来建立书库,但在后期使用中,只可以按目录分类查找,或者搜索电子书文件名中的作者和书名,难以建立全书库的目录索引,更没有保存和检索书摘及评论的功能。
这里设想了一种私有化书库方案,可以管理实体书籍和电子书,包括所有图书的元数据、内容简介、书摘及评论,并有电子书的有组织存放。最后,所有数据易于私有化备份,并利于检索。
图书管理平台和应用
为实现这个目标,我尝试过一些图书管理平台和应用,比如豆瓣有丰富的图书内容和社交属性,但图书管理功能不强,更不开放;私家书藏、BookBuddy、Bookly、Bookshelf 等应用多侧重于某些部分功能。关键,它们都没有开放和完善的数据导出备份机制,并且不能管理本地电子书。
Bookshelf 是一款用于图书管理的开源安卓应用,旨在管理实体书籍。扫描书籍的条形码,书籍将添加到书架。您可以记录书籍信息、阅读状态、笔记、标签等。这些记录可以导出为 csv、tsv 及包含图书封面图片的二进制数据流的 HTML。
我尝试将导出文件进一步完善,补充比如阅读时间、星级评分和评论,Bookshelf 刮削的图书元数据也需要修改和补充。
这个表格包含这些字段:Book Id, ISBN, Bookshelf, Tags, Wishlist, Started Reading On, Ended Reading On, Pages Read, Read, My Rating, Note, Title, Subtitle, Language, Categories, Authors, Illustrators, Translators, Editors, Narrators, Photographers, Publisher, Page Count, Published At, Format, Series, Volume, Loan Type, Loan Name, Loan Start Date, Loan Due Date, Purchase From, Purchase Price, Purchase Date, Description。
基于这份数据,还需要写一个程序来管理和浏览,并添加管理本地电子书的功能。实际相当于重造车轮,而不是使用既有车轮。
calibre
calibre 是一个自由开源的跨平台电子书软件套装,可以用来组织、存放以及管理电子书,支持大多数的电子书格式。同时也支持与许多流行的电子书阅读器进行同步,并可能在 DRM 的限制下转换电子书的格式。
官方截图,查看更多
作为本地化电子书管理工具,calibre 的优点在于(基于 calibre 5.40):
- 通过刮削器完善书库中的电子书元数据信息;
- 通过设备同步的方式来实现本地数字书库和 kindle 的电子书同步传输;
- 作为内容服务器,通过WEB方式发布书库。
calibre 书库
使用 calibre 时,第一件事就是创建书库,即选择书库的存储路径,后期也可以再建新的书库,复制或者移动书库。
往书库中添加书籍的时候,calibre 会自动将电子书文件加入到书库的元数据数据库中,与此同时,会把该书文件的一份拷贝添加到书库所在文件夹中。
除了添加本地电子书,calibre 可以从 Amazon、Kobo、Google Books 等搜索并获取书籍,抓取新闻功能还可以将 RSS 源甚至 HTTP 在线内容下载并转换为电子书。
书库目录下有一个名为 metadata.db 的文件,该文件内含书库自身的信息和书库中所有书籍的元数据。另外一个名为 metadata_db_prefs_backup.json 的文件,该文件内含书库中一些基本的偏好设置信息。
元数据,就是书籍自身的相关信息,包括书名、作者、封面、出版日期等。被收录进入书库的每一本书都有一份元数据,有了这些格式化的数据,可以很方便地管理自己的书籍。这算是calibre的一项核心功能(当然其他一些电子书管理软件也支持元数据,如 Bookshelf)。
元数据中有一项重要的 Ids,主要使用 ISBN 填入,ISBN 即国际标准书号(International Standard Book Number),一个国际标准书号只有一个或一份相应的图书与之对应,因此也成为记录和搜索图书的最准确参数。国际标准书号长度为13码(ISBN-13)或者10码(在2007年1月1日之前)数字,形如ISBN 978-156-592-724-7,calibre 标记为 isbn:9781565927247。ISBN-10: 1565927249 和 ISBN-13: 978-1565927247 标注法不符合 calibre 格式,无法提供 ISBN 有效性检查。ISBN 查询可使用 isbndb.com,世界上最大的图书数据库,结果包括标题、作者、出版商、出版日期、装订、页面、标价等。
实际上我们也可能利用 calibre 来管理其他非标准出版图书的电子档,那可以在 Ids 填入 DOI、ASIN 甚至 URI(Universal Resource Identifier),calibre 不检查这些类型的有效性。
DOI 即数字对象唯一识别符(Digital Object Identifier),由国际标准化组织标准化,用于惟一地标识数位资源,广泛用于识别学术、职业和政府信息,例如期刊论文、研究报告和数据集以及官方出版物。DOI 是一个字符串,形如 DOI:10.1000/182,目前的论文网络发布多有创建 DOI,引用论文也提供 DOI。将 10.1000/182 透过 Handle 系统、但更多是透过网站解析,获得真实的资源位置 https://doi.org/10.1000/182。再如,DOI:10.1037/1089-2680.6.2.139 通过 doi.org 解析查询,或者直接访问 https://doi.org/10.1037/1089-2680.6.2.139
,将在 https://journals.sagepub.com/doi/10.1037/1089-2680.6.2.139
访问到最终资源。
许多大型网站将分配固定串号来标记商品,如亚马逊使用 ASIN 号来管理和识别在其网站上出售的产品,比如 ASIN:B09T971KPQ 指向《My Evil Mother》,这电子小说目前在 Kindle 商店排名第一。另外 calibre 也提供类似 amazon:1565927249 这样的示范。
URI 即统一资源标识符(Uniform Resource Identifier),URI 的最常见的形式是统一资源定位符(Uniform Resource Locator, URL),calibre 给出的格式是 uri:http://www.gutenberg.org/33284
,这对没有指定 ISBN、DOI、ASIN 等标识的在线 PDF 文档等有用。
另外还特别说明一下 ISBN 元数据编辑里的标签,即电子书的分类,软件提示此项对搜索非常有用。标签示范格式如 lcsh: Novel,这里的 LCSH 指美国国会图书馆标题表(Library of Congress Subject Headings),实际上这是一个非常庞大的图书分类目录,类似的还有《中国图书馆分类法》(Chinese Library Classification,CLC,中图法),通常用于图书馆主题编目工作中。对于个人书库来说,可以适当参考中国图书馆分类法第五版简表即可。
参考农家书屋的分类方法:在中图法的基础上分成6类——政经类、文化类、科技类、生活类、少儿类和综合类——分别对应中图法的几个大类,(1)、政经类:主要包括A、B、C、D、E、F类; (2)、文化类:主要包括G、H、I、J、K类;(3)、科技类:主要包括N、O、P、Q、S、T、U、V、X类;(4)、生活类:主要包括R类;(5)、少儿类:主要包括各类型图书中少儿读物类图书;(6)、综合类:主要包括Z类图书,或无法确定类别的其他内容的图书。实际上许多大型综合书店也常常根据主题规划和市场需求设置有文学馆、社科馆和科技馆等,也是以上思路。
标准电子书往往都含有完整的元数据,但也可以手动添加及编辑,以及从无数据下载源中下载元数据,这些数据源包括 Google Books、Amazon 等,可以在首选项>分享>下载元数据中维护数据源。
元数据编辑中还包括一个注释区域,支持 HTML 源代码编辑,可以将之自定义为包含内容简介、评价、笔记等区块。这也是完善私有书库拥有内容简介、书摘及评论的一种变通做法。
元数据是 calibre 的搜索范围。
calibre 书库目录中更多的是电子书文件的拷贝,默认目录是 {author_sort}/{title}/{title} - {authors}
,{author_sort}/{title}/
目录下还保存 cover.jpg(封面文件)、metadata.opf(元数据文字信息文件),以及电子书文件格式转换后的另一个/些 {title} - {authors} 文件。默认命名规则将中文转为汉语拼音,可以在首选项>导入/导出>添加书籍中修改这个规则。总之,会修改原电子书文件的分类结构和文件名,建议同步保留自建书库。
calibre 的更多功能通过图标就可以直接使用,其中阅读器和编辑器是可单独运行的组件。更多详情参看 calibre 官方手册。
那么实体书籍呢?
以上方法实现了在 calibre 中有组织存放电子书,并管理元数据、内容简介、书摘及评论,但始终它只能管理电子书。那么实体书籍呢?
实际上,我们仍旧能够在 calibre 中管理实体书籍。
- 制作实体书籍对应的空文件,如:魔鬼辭典.mobi,将文件添加到现有书库;
- 编辑魔鬼辭典.mobi 的元数据,并在标签栏填写:实体书籍;
- 基于 tags:"=实体书籍" 创建一个虚拟书库,名称为:实体书籍。
内容服务器
calibre 可以作为内容服务器,在 calibre 程序中通过 连接/共享>启动内容服务器实现。
我们可以在一台在线的电脑上安装 calibre 并启动内容服务器。由于 Synology NAS 和 Internet-in-a-Box(IIAB) 通常是在线状态,也推荐在它们中实现。
另外,有一个独立项目Calibre-Web,通过 WEB 方式生成OPDS(Open Publication Distribution System,开放出版物发行系统)发布电子书库,可用性比calibre内置的内容服务器更高。
x86 平台的群晖支持 Docker 套件,无法直接于 Synology NAS 上执行的应用程式可透过 Docker 进行部署(Docker 的适用机种)。因此可以在群晖中先安装 Docker,再在 Docker 中安装 Calibre-Web 及依赖包的打包镜像 linuxserver/calibre-web。
IIAB 是一个私有化部署的离线知识服务器,可以快速安装并实现 Calibre-Web。IIAB 运行 Calibre-Web 的一个在线的演示。
如果希望实现公网访问 Calibre-Web,可以使用 DDNS、frp 内网穿透等。
酷玛Play《树莓派+calibre创建电子书服务器》一文详细介绍了实现内容服务器的这两种方式。
群晖NAS中的Calibre-Web电子图书馆
我们可以利用树莓派+calibre/Calibre-Web创建电子书服务器,但由于通常将电子书存放在存储服务器(比如群晖NAS)中,在存储服务器中安装Calibre-Web更便于浏览、阅读和下载电子书。以下示范在DS218中搭建Calibre-Web电子图书馆。
群晖NAS中的Calibre-Web需要运行在Docker中,但Docker官方套件不支持用于DS218。这个存储库介绍了在 Synology DS218 上安装 Docker 的方法,通过使用直接 ssh 连接到 NAS 安装 aarch64 docker 二进制文件来实现。
有了Docker,Calibre-Web的安装和配置参看接下来的说明。
在群晖 DSM 7.2中,Docker Inc. 提供的第三方套件 Docker 更名为 Container Manager,这是一个轻量级虚拟化应用程序,升级了 UI 并新增支持 Docker Compose 和更多群晖机型,但仍旧不包括DS218。
这篇文章介绍了一种方法,通过SSH执行脚本,将不受Container Manager支持的DS118、DS218、DS218play、DS418j、DS418、RS819以及DS119j等ARMv8机型伪装成官方支持的DS420j机型,再手动上传安装Container Manager。
一、安装Container Manager
1、SSH执行脚本,伪装DS420j机型
sudo -i
sed -i 's/218/420j/g' /etc.defaults/synoinfo.conf
sed -i 's/218/420j/g' /etc/synoinfo.conf
2、手动上传安装Container Manager
Container Manager下载地址:https://archive.synology.com/download/Package/ContainerManager
安装时要取消勾选“安装完成后重启”。
3、SSH执行脚本,恢复机型
sudo -i
sed -i '/^exclude_model/d' /var/packages/ContainerManager/INFO
sed -i 's/420j/218/g' /etc.defaults/synoinfo.conf
sed -i 's/420j/218/g' /etc/synoinfo.conf
二、安装Calibre-Web
1、在共享文件夹中建立 books文件夹,用于存放书库资源;在 docker 文件夹中创建 calibre-web 文件夹,用于存放 Docker 镜像的配置文件。
2、在Container Manager的注册表中搜索linuxserver/calibre-web,下载并安装该映像。
3、初始化容器并进行设置:
- 容器名称:calibre-web
- 存储空间设置:将容器的存储空间映射到共享文件夹:/books > books 和 /config > docker/calibre-web:
- 端口设置:将容器内部的 8083 端口映射至本地端口,如8083;
- 启动calibre-web容器。
4、在内网访问 IP:8083 打开calibre-web的管理界面,默认的账号是 admin,密码是 admin123。
在初始配置Calibre-Web时,通常会显示“数据库路径无效,请输入正确的路径”,因为它依赖 Calibre 数据库文件(metadata.db)。您可以使用calibre桌面程序建立的数据库文件,也可以使用一个空白数据库文件。
如果群晖NAS的books文件夹中已经存放了电子书,按以下步骤操作。
(1)在books文件夹下建立一个空白文件夹library;
(2)使用映射网络驱动器,将Z:映射到群晖中的books文件夹(Z: > \dsm\books);
(3)打开calibre桌面程序,将calibre书库位置设为Z:\library,添加书籍位置选择Z:。前面提到calibre 书库建立的机制,library文件夹中会存放电子书文件的拷贝和metadata.db文件,请确保群晖NAS有足够的空余存储空间。
添加书籍过程通常比较缓慢,当calibre桌面程序完成添加书籍后,在Calibre-Web数据库配置中填写Calibre 数据库的位置为/books/library,Calibre-Web即可正常显示图书馆。
默认设置下Calibre-Web没有书籍上传功能,需要在管理权限 - 基本配置中启用上传,才能启用书籍上传功能。但建议使用calibre桌面程序来管理图书。
备注
以上方法实现了在 calibre 中有组织存放电子书,并管理电子书和实体书籍的元数据、内容简介、书摘及评论,calibre 可以搜索所有这些记录。
从 5.0 开始,calibre 已经转移到 Python 3,要留意一些第三方 calibre 插件是否同步移植。如在早期留意到,一个支持盛大 Bambook 的设备插件便不支持 calibre 1.x 以后的版本(我与插件作者李凡希核实过,参看《calibre可以支持盛大锦书(Bambook)吗?》,作者的文章),这个插件支持 calibre 与 Bambook 的 SNB 格式电子书同步。
2006 年,Kovid Goyal 想要在 Linux 上运行索尼第一款在美国商业销售的电子墨水阅读器 PRS-500,对其使用的 USB 协议进行逆向工程写成了libprs500,并支持将电子书格式转换为SONY 阅读器使用的 LRF 格式。2008 年,libprs500更名为 calibre。
2023 年 11 月 17 日,Kovid Goyal 宣布推出 Calibre 7.0,包含有望重新定义用户体验的突破性功能。
- 动态笔记存储:能够存储包含链接、图像和富文本格式的注释;
- 音频 EPUB 支持:具有预先录制的朗读文本的声音;
- 增强的数据管理:为书籍添加额外的数据文件;
- 私人回收站:绕过了操作系统默认提供的回收站,用户可轻松恢复书籍及其元数据。
「圆周率文化是个人站点,重点分享科技、商业、医学及人文资讯。
「圆周率文化得到中国汽车绞盘网的支持,深表感谢。中国汽车绞盘网业务始创于2001年,为越野车、清障车、消防车、军用车、特种车及工程应用等拖曳、救援场景提供手动绞盘、电动绞盘、液压绞盘和技术支持。