跳转到主要内容

Calibre助手脚本(ISBN猜测,RTF转换为DOC,悬停书籍检测,...)。

项目描述

这是我编写的一系列独立脚本,用于帮助管理我的Calibre电子书库。

脚本列表

以下脚本可用

calibre_guess_and_add_isbn

检查没有ISBN(在元数据中设置)的书籍,如果首页中存在类似ISBN的字符串,则将其添加到元数据中(这使得可以下载完整的元数据、封面等)。

calibre_convert_docs_to_rtf

将任何.doc转换为.rtf(除非已存在) - 使用openoffice。

calibre_add_if_missing

检查给定的目录树是否包含尚未在Calibre中出现的书籍,如果找到则添加。使用二进制文件比较来检查文件是否相同(不使用文件名和元数据,这是故意的)。

calibre_find_books_missing_in_database

检查Calibre数据库目录是否包含一些未注册的文件,如果找到则报告。

calibre_report_duplicates

报告重复项,添加有关哪些可以安全合并的信息(因为重复的书籍是相同的或因为格式不重叠),以及哪些需要仔细检查(因为在同一格式中存在不同的文件)。

脚本详情

calibre_guess_and_add_isbn

查询Calibre中的所有没有ISBN的书籍,然后尝试在(通过扫描几个首页)内部定位ISBN,如果找到则更新Calibre书籍元数据。

不带参数运行它

calibre_guess_and_add_isbn

找到的任何ISBN号码将被添加到图书元数据中(并且脚本会报告它们)。图书是从最新的一本开始扫描的,所以一旦处理了新图书,就可以终止(按Ctrl-C)脚本。

稍后可以在Calibre GUI中使用ISBN检索图书元数据和/或封面。只需启动Calibre,查找设置了ISBN但缺少元数据的图书,例如使用以下查询:

isbn:~[0-9] not publisher:~[a-z]

(以上表示:ISBN包含一些数字,出版社不包含任何字母)。根据您的流程,您可以选择以下操作之一:

  • 自动获取元数据(标记所有这些图书,右键单击,选择编辑元数据信息/下载元数据)

  • 逐个检查每本图书(标记这些图书,右键单击,选择编辑元数据信息/逐个编辑元数据,然后依次单击每本图书的获取元数据并检查是否合适)。

calibre_convert_docs_to_rtf

查询Calibre中所有只有.doc格式的图书,然后使用OpenOffice将它们转换为.rtf格式,并添加此格式作为备用。

在过程中使用OpenOffice(及其提供的pyuno库)。

不带参数运行它

calibre_convert_docs_to_rtf

注意:有时脚本会在工作结束(完成时)意外崩溃。我尚未诊断原因(最可能的问题是我在使用的库中),但崩溃是无害的,并且不影响实际的转换过程。

calibre_find_books_missing_in_database

报告Calibre库目录中存在但数据库中不存在的文件(因此在Calibre界面中不可见)。

这些文件报告到标准输出。要将它们全部添加到calibre中,请使用管道输出。例如

calibre_find_books_missing_in_database | xargs -d "\n" calibredb add

(但最好先审查一下)

calibre_add_if_missing

扫描给定的目录和/或指定的文件,将所有尚未存在于Calibre中的图书添加到Calibre中。

重复检查仅根据文件内容进行。如果Calibre中已经存在相同的文件,则跳过该文件。

我最初编写这个脚本来处理 我想确保一切都已经导入并且可以删除 的场景,但多年来我倾向于用它来进行大多数批处理电子书导入。

示例

calibre_add_if_missing /home/jan/OldBooks

(导入OldBooks目录中尚未存在的任何图书,不要触摸此目录——这可能在之后被删除)。

或者可能

calibre_add_if_missing --tag="programming,web-development" \
    --move=$HOME/ebooks-done  ./freshly-bought/*.epub

(从./freshly-bought添加所有.epub文件,用programmingweb-development标记它们,将所有成功导入的文件移动到~/ebooks-done/)。

对于所有选项,运行

calibre_add_if_missing --help

calibre_report_duplicates

分析Calibre数据库,寻找可能的重复项,并报告它们,同时添加哪些是肯定相同的,哪些需要检查的信息。

不执行任何更改,只是打印报告(作为文本、HTML或启用javascript的HTML,可以通过点击删除已审查的项目)。

示例

calibre_report_duplicates -f txt

(文本输出到控制台)

calibre_report_duplicates -f html -o /tmp/report.html

(HTML输出重定向到文件)

calibre_report_duplicates -f js -o /tmp/report.html

(也是HTML,但带有隐藏行按钮,方便审查)

另请参阅

calibre_report_duplicates --help

安装和配置

先决条件

必须安装、正确配置Calibre并且有一些数据库(否则运行这些脚本没有意义)。该

calibredb

命令必须在PATH中(或者.ini文件中的calibredb变量必须设置正确,见下文)。

提供命令的工具

pdftotext
catdoc
djvutxt
archmage

应安装并存在于PATH中(或正确配置在.ini中,或在.ini中禁用,见下文)。在Ubuntu Linux或Debian Linux上,可以从标准仓库安装,只需安装以下软件包

poppler-utils
catdoc
djvulibre-bin
archmage

需要Python 2.6或2.7(脚本使用了在2.6中引入的一些功能 - 特别是tempfile扩展、subprocess和namedtuple)。此外,还必须安装lxml库。在Debian或Ubuntu上,只需安装以下软件包

python2.7
python-lxml

为了使calibre_convert_docs_to_rtf正常运行,必须安装ootools库。安装它的最简单方法

easy_install ootools

(在Ubuntu上 sudo easy_install ootools)。

我开发并使用这些脚本在Ubuntu Linux上。如果安装了必要的工具,它们也应该能在Windows或Mac上运行,但我从未尝试过。

实际安装

简单

sudo pip install mekk.calibre

pip install --user mekk.calibre

应该可以(后者需要将~/.local/bin添加到PATH)。如果您不想对系统或用户目录进行操作,请考虑使用virtualenv

配置

可以使用~/.calibre-utils文件来配置一些程序设置。如果文件不存在,每次运行任何脚本时都会创建文件,并可以自定义。

以下为默认内容

[commands]
catdoc = catdoc
archmage = archmage
djvutxt = djvutxt
calibredb = calibredb
pdftotext = pdftotext

[isbn-search]
guess_lead_lines = 10000
guess_lead_pages = 10

命令部分定义了正在使用的外部工具的位置。如果命令在PATH中,可以使用名称。否则,可以指定完整路径。最后,如果某些工具缺失,可以将它定义为空字符串。

isbn-search部分指定了在基于页面格式的文档(如PDF或DJVU)中扫描多少页码或行(在免费格式如TXT或CHM中)以查找类似ISBN的字符串。

例如,可以修改文件如下

[commands]
catdoc = /usr/local/bin/catdoc
archmage =
djvutxt =
calibredb = /opt/calibre/calibredb
pdftotext = pdftotext

[isbn-search]
guess_lead_lines = 12000
guess_lead_pages = 15

在这种情况下,将使用/usr/local/bin中的catdoc,期望在/opt/calibre中找到calibredb,将在PATH中寻找pdftotext,而archmagedjvutxt将被视为缺失(因此,isbn猜测脚本将无法扫描CHM和DJVU文件以查找ISBN,并将忽略它们)。

历史记录

(只描述了主要更改)

1.4.1

calibre_add_if_missing:添加了--force-language(用于设置书籍语言属性)。

calibre_add_if_missing在尝试移动文件时崩溃(使用了--move选项),但目标目录中已存在同名文件。修复后,文件将移动到目标目录的某个子目录。

1.4.0

calibre_report_duplicates增强功能

  • 输出格式由--format=txt--format=html(而不是--html))选择

  • 添加了启用JavaScript的输出(--format=js),它支持点击报告项

  • 使用SimHash代替difflib来查找类似标题。速度更快,提供的结果略有不同但合理

  • 报告类似作者

  • 新选项--cache(使用缓存的清单以加快大型图书馆的重复运行)

  • 新选项--output(命名输出文件)

1.3.2

修复了错误

  • calibre_guess_and_add_isbn在将ISBN保存到标题中包含非ASCII字符的书籍时崩溃(错误的诊断打印)

  • 由于自calibre 1.0以来calibredb目录--sort-by=id会崩溃(因此使用该命令的内部脚本也会崩溃),我们改用按时间戳排序。

1.3.1

calibre_add_if_missing修复

  • 即使没有运行--cache,也会保留缓存的元数据,以便下次运行可能使用。

  • 使用--cache运行时,如果缓存数据超过24小时,将忽略它们。

  • 如果在calibre目录中找到的文件不存在(例如,如果在运行过程中被重命名或删除,或者缓存在使用中且自创建以来已删除了一些书籍),calibre_add_if_missing只会发出警告,但会继续其工作(而不是因错误而退出)。

1.3.0

Python3兼容性工作,脚本应在Python3下可运行(注意:我仍然每天在2.7下使用它们,因此3的测试较少)。

calibre_add_if_missing在存在可能重复的类似大小的情况下,会执行一些epub内部的比较。特别是,它能够忽略calibre_bookmarks(因此,由于此文件被阅读器添加或修改而导致的重复epub不会被添加)。

calibre_add_if_missing具有--cache选项(重用上次运行中缓存的目录以加快大型图书馆的处理速度)。

calibre_add_if_missing具有--dry-run选项。

1.2.4

calibre_add_if_missing具有--move选项(将成功添加的文件移动到另一个目录 - 可能是类似垃圾的目录)。

calibre_add_if_missing具有--title-from-name选项(强制使用文件名作为标题而不是处理元数据)。

calibre_add_if_missing具有--tag--author选项(强制给定标签和/或作者而不是处理元数据)。

calibre_add_if_missing将文件名复制为.doc.docx.rtf.txt文件的标题。这些文件极其罕见地具有有意义的元数据。

1.2.3

calibre_find_books_missing_in_database不再报告书籍子目录等(理由:我使用书籍子文件夹来存储像书籍源代码或书籍源这样的东西,同时它不是calibre自己放置书籍的地方)。

修复了两个“UnicodeEncodeError”错误(报告为无文件的书和具有unicode字符的名称的书)

1.2.2

calibre_guess_and_add_isbn捕获各种错误,报告它们,并继续工作。对于任何错误,信息中都会提到有问题的书籍名称。

Ctrl-C终止ISBN猜测并正确清理。

#5 - 修复包含X字母的ISBN的修复。

1.2.0

calibre_add_if_missing禁用了Calibre自己的重复检查(这是基于标题的,因此过于简单,有时会拒绝好的书籍)并打印有关找到的实际重复项的详细信息(如果存在)。

一些calibre_report_duplicates改进

  • 修剪一些冗余匹配(如果a类似于b,a类似于c,而b类似于c,则不报告后者),

  • 如果书籍具有相同的/类似的作者和标题,并且它们具有相同的系列和不同的系列索引(因此同一本书的不同卷不再报告为可能的重复项),则不会报告为重复项。

calibre_guess_and_add_isbn修复

  • #3 - 在ISBN检测期间避免latin-1编码的chm文件崩溃。

  • 处理ISBN文本中的某些Unicode字符(空格、长划线等)。

  • 在使用之前验证ISBN校验和。

1.1.1

添加了calibre_report_duplicates

calibre_add_if_missing可以提供单个文件(最初只能处理完整目录)。

1.0.4

首次重大发布。功能包括:calibre_find_books_missing_in_databasecalibre_guess_and_add_isbncalibre_convert_docs_to_rtfcalibre_add_if_missing

源代码,错误报告

项目托管在这里

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分布

mekk.calibre-1.5.0.tar.gz (34.8 kB 查看哈希值)

上传时间 源代码

由以下支持