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文件,用programming和web-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,而archmage和djvutxt将被视为缺失(因此,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_database,calibre_guess_and_add_isbn,calibre_convert_docs_to_rtf,calibre_add_if_missing。
源代码,错误报告
项目托管在这里。
项目详情
mekk.calibre-1.5.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 24941efb964a791f13ce17b712d5fd866ffd641ce0be078b65e6a89fe26f127f |
|
MD5 | 19a52ec721021ca3252be90fb19c0b38 |
|
BLAKE2b-256 | 401316efebbec3efeadbd29f04dd54a9544d1b58508bd1611f5900e48c6b1cc8 |