构建私有化书库的方案实践

π.Notes 2022-05-10 38 次浏览 次点赞

对于喜欢读书的人来说,难免电子书会越来越多,通常使用超大的存储空间和目录分类来建立书库,但在后期使用中,只可以按目录分类查找,或者搜索电子书文件名中的作者和书名,难以建立全书库的目录索引,更没有保存和检索书摘及评论的功能。

1980e2e9-abbc-44bb-9590-4c473ba05b9e.jpg

这里设想了一种私有化书库方案,可以管理实体书籍和电子书,包括所有图书的元数据、内容简介、书摘及评论,并有电子书的有组织存放。最后,所有数据易于私有化备份,并利于检索。


图书管理平台和应用


为实现这个目标,我尝试过一些图书管理平台和应用,比如豆瓣有丰富的图书内容和社交属性,但图书管理功能不强,更不开放;私家书藏、BookBuddy、Bookly、Bookshelf 等应用多侧重于某些部分功能。关键,它们都没有开放和完善的数据导出备份机制,并且不能管理本地电子书。

Bookshelf 是一款用于图书管理的开源安卓应用,旨在管理实体书籍。扫描书籍的条形码,书籍将添加到书架。您可以记录书籍信息、阅读状态、笔记、标签等。这些记录可以导出为 csv、tsv 及包含图书封面图片的二进制数据流的 HTML。

我尝试将导出文件进一步完善,补充比如阅读时间、星级评分和评论,Bookshelf 刮削的图书元数据也需要修改和补充。

20220422173550.jpg

这个表格包含这些字段: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 的限制下转换电子书的格式。

main-ui.jpg
官方截图,查看更多

作为本地化电子书管理工具,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)。

2022-04-21-172605.jpg

元数据中有一项重要的 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 不检查这些类型的有效性。

20220422101426.png

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 访问到最终资源。

20220422101000.png

许多大型网站将分配固定串号来标记商品,如亚马逊使用 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),实际上这是一个非常庞大的图书分类目录,类似的还有《中国图书馆分类法][4]》,通常用于图书馆主题编目工作中。对于个人书库来说,可以适当参考中国图书馆分类法第五版简表即可。

标准电子书往往都含有完整的元数据,但也可以手动添加及编辑,以及从无数据下载源中下载元数据,这些数据源包括 Google Books、Amazon 等,可以在首选项>分享>下载元数据中维护数据源。

元数据编辑中还包括一个注释区域,支持 HTML 源代码编辑,可以将之自定义为包含内容简介、评价、笔记等区块。这也是完善私有书库拥有内容简介、书摘及评论的一种变通做法。

元数据是 calibre 的搜索范围。

calibre 书库目录中更多的是电子书文件的拷贝,默认是 {author_sort}/{title}/{title} - {authors},{author_sort}/{title}/ 目录下还保存 cover.jpg(封面文件)、metadata.opf(元数据文字信息文件),以及电子书文件格式转换后的另一个/些 {title} - {authors} 文件。默认命名规则将中文转为汉语拼音,可以在首选项>导入/导出>添加书籍中修改这个规则。总之,会修改原电子书文件的分类结构和文件名,建议同步保留自建书库。

20220421175728.jpg

calibre 的更多功能通过图标就可以直接使用,其中阅读器和编辑器是可单独运行的组件。更多详情参看 calibre 官方手册


那么实体书籍呢?


以上方法实现了在 calibre 中有组织存放电子书,并管理元数据、内容简介、书摘及评论,但始终它只能管理电子书。那么实体书籍呢?

实际上,我们仍旧能够在 calibre 中管理实体书籍。

  1. 制作实体书籍对应的空文件,如:魔鬼辭典.mobi,将文件添加到现有书库;
  2. 编辑魔鬼辭典.mobi 的元数据,并在标签栏填写:实体书籍;
  3. 基于 tags:"=实体书籍" 创建一个虚拟书库,名称为:实体书籍。

calibre-web


calibre 可以作为内容服务器,通过 WEB 方式生成开放出版物发行系统(Open Publication Distribution System)发布书库,这个服务叫 calibre-web。在 calibre 程序中通过 连接/共享>启动内容服务器实现。

61993808-655a9280-b069-11e9-93a4-1d51de343713.jpg

我们可以在一台在线的电脑上安装 calibre 并启动内容服务器。由于 Synology NASInternet-in-a-Box(IIAB) 通常是在线状态,也推荐在它们中实现。

x86 平台的群晖支持 Docker 套件,无法直接于 Synology NAS 上执行的应用程式可透过 Docker 进行部署(Docker 的适用机种)。因此可以在群晖中先安装 Docker,再在 Docker 中安装 calibre-web 及依赖包的打包镜像 linuxserver/calibre-web

IIAB 是一个私有化部署的离线知识服务器,可以快速安装并实现 calibre-web。IIAB 运行 calibre-web 的一个在线的演示

如果希望实现公网访问 calibre-web,可以使用 DDNS、frp 内网穿透等,这里不作详述。


备注


以上方法实现了在 calibre 中有组织存放电子书,并管理电子书和实体书籍的元数据、内容简介、书摘及评论,calibre 可以搜索所有这些记录。

从 5.0 开始,calibre 已经转移到 Python 3,要留意一些第三方 calibre 插件是否同步移植。如在早期留意到,一个支持盛大 Bambook 的设备插件便不支持 calibre 1.x 以后的版本(我与插件作者李凡希核实过,参看《calibre可以支持盛大锦书(Bambook)吗?》,作者的文章),这个插件支持 calibre 与 Bambook 的 SNB 格式电子书同步。




本文由 PeakOneTemple 整理创作,参考 知识共享署名 3.0 协议,撰写及摘编内容仅反映个人观点和立场,如果任何可能的雇主与赞助者持有相同的意见,只是巧合;基于互联网链接的腐烂率,无法持续验证外部链接的真实有效性,不对可能的链接无效(linkrot)或者内容转移(Content Drift)负责。

圆周率文化坚持非功利写作和分享,但会有一些获利推荐,以及接受您的打赏,这都会鼓励我
感谢您的支持,我会持续给您山巅.一寺.一壶酒的独特视角!

还不快抢沙发

添加新评论