ISBN(国际标准书号)的提取、清理、转换、连字符和元数据。
项目描述
信息
isbnlib是一个(纯)python 库,它提供了几种有用的方法和函数来验证、清理、转换、断字和获取 ISBN 字符串的元数据。
国际标准书号
ISBN 的正式形式类似于ISBN 979-10-90636-07-1。然而,对于大多数应用程序来说,只有数字很重要,如果需要,您可以随时“屏蔽”它们(见下文)。该库主要使用“条纹”ISBN(仅数字和 X),例如“0826497527”。您可以使用canonical(isbnlike)剥离类似 ISBN 的字符串。您可以使用mask(isbn)来“屏蔽” ISBN 。所以在下面的例子中,当你在参数中看到'isbn'时,它是一个'striped' ISBN,当参数是'isbnlike'时,它是一个字符串,如ISBN 979-10-90636-07-1甚至是什么像asdf 979-10-90636-07-1 bla bla一样脏。
两个重要的概念:有效的 ISBN 应该是根据规则构建的 ISBN,这与已发布的 ISBN 不同,后者是已经发布给出版商的 ISBN(这是图书馆和大多数 Web 服务的使用) . 然而isbn.org可能出于法律原因,将两者合并!因此,根据isbn-international.org,'9786610326266' 无效(因为块 978-66... 尚未发布,但是如果你使用is_isbn13('9786610326266')你会得到True (因为 '9786610326266' 如下ISBN 的规则)。但是情况更加模糊,试试meta('9786610326266')你会发现这个 ISBN 已经被使用了!
如果可能,请使用 isbn-13 格式的 ISBN(自 2007 年以来,仅发布 isbn-13 格式的 ISBN)。您始终可以将 isbn-10 转换为 isbn-13,但不能反过来(阅读此内容)。在isbn-international.org或wikipedia上阅读有关 ISBN 的更多信息。
主要功能
- is_isbn10(isbn10like)
验证为 ISBN-10。
- is_isbn13(isbn13like)
验证为 ISBN-13。
- to_isbn10(isbn13)
将 isbn-13 转换为 isbn-10。
- to_isbn13(isbn10)
将 isbn-10 转换为 isbn-13。
- 规范(isbnlike)
只保留数字和 X。你会得到像9780321534965和954430603X这样的字符串。
- 干净(isbnlike)
清除 ISBN(仅限合法字符)。
- notisbn(isbnlike,级别='严格')
检查目标以使 isbn-like 无效。
- get_isbnlike(文本,级别='正常')
提取所有看起来像 ISBN 的子字符串(对于抓取非常有用)。
- get_canonical_isbn(isbnlike,输出='bouth')
提取 ISBN 并将其转换为规范形式。
- ean13(isbnlike)
将isbnlike字符串转换为 EAN13 数字(经过验证的规范 ISBN-13)。
- 信息(isbn)
获取分配给此 ISBN 的语言或国家/地区。
- 掩码(isbn,分隔符='-')
屏蔽(连字符)规范的 ISBN。
- 元(isbn,服务='默认')
为您提供与 ISBN 关联的主要元数据。作为服务参数,您可以使用: “goob”使用Google 图书服务(不需要密钥)并且 是默认选项, “wiki”使用wikipedia.org api(不需要密钥), “openl”使用OpenLibrary。 org api(不需要密钥)。您可以使用config.add_apikey(service, apikey)输入 API 密钥(参见下面的示例)。输出可以格式化为bibtex , csl (CSL-JSON), msword , endnote、refworks、 opf或json (BibJSON) 书目格式与registry.bibformatters。现在,您可以通过添加插件、更多元数据提供程序或新的书目格式化程序(检查可用插件)来扩展此功能的功能。
- 版本(isbn,服务='合并')
返回与此 ISBN 相关的版本的 ISBN 列表。默认使用“合并”(合并“openl”、“thingl”和“wiki”),但其他提供程序可用:“openl”(使用Open Library中的搜索 API )、“thingl”(使用LibraryThing中的服务 ThingISBN )、'wiki'(使用来自Wikipedia的服务引用)和'any'(首先尝试'wiki',如果没有数据则'openl')。
- isbn_from_words(单词)
从单词列表中返回最可能的 ISBN(针对您的地理区域)。
- goom(词)
从Google Books multiple references返回参考列表。
- 分类(isbn)
返回规范 ISBN的分类器字典。有关这些分类器的含义,请参阅OCLC。底层服务中的大部分数据都是针对英文书籍的。
- doi(isbn)
从 ISBN-13 返回 DOI 的 ISBN-A。
- doi2tex(DOI)
返回给定 DOI 格式为 BibTeX 的元数据。
- 任(文件名)
使用文件名中 ISBN 中的元数据重命名文件。
- 描述(isbn)
返回图书的简短描述。 几乎所有可用的数据都是针对美国书籍的!
- 封面(isbn)
返回带有封面 url 的字典。 几乎所有可用的数据都是针对美国书籍的!
安装
从命令行输入(在某些情况下,您必须在命令前加上sudo):
$ pip install isbnlib
如果您使用 linux 系统,您可以使用您的分发包管理器进行安装(所有主要发行版都有包python-isbnlib 和python3-isbnlib),但是(通常)非常旧并且不再工作了!
对于开发人员
API 的主要命名空间
在命名空间isbnlib 中,您可以访问核心函数: is_isbn10、is_isbn13、to_isbn10、to_isbn13、canonical、 clean、notisbn、get_isbnlike、get_canonical_isbn、mask、 info、check_digit10、check_digit13、doi和ean13。
此外,您还可以访问元数据函数,即: meta、editions、ren、desc、cover、 goom、classify、doi2tex和isbn_from_words。
这些方法引发的异常都可以使用ISBNLibException捕获。
您可以使用命名空间isbnlib.dev中公开的类和函数来扩展 lib ,即:
WEBService一个处理对 Web 服务的访问(仅通过传递 url)并支持gzip的类。您可以将其子类化以扩展功能……但您可能不需要使用它!它在下一堂课中使用。
WEBQuery一个使用WEBService从 Web 服务检索和解析数据的类。您可以通过子类化此类来构建新的元数据提供者。他的主要方法允许传递专门针对特定需求(data_checker和 parser )的自定义函数(处理程序)。它实现了一种节流机制,默认速率为每个服务每秒一次调用。
元数据一个构造、清理和“验证”元数据记录的类。他的方法merge允许为来自不同来源的记录实现一个简单的合并过程。这个类的主要特性,可以通过调用stdmeta函数来实现!
vias公开了几个函数来调用服务,只需将名称和指针传递给服务的查询函数。 vias.parallel允许进行线程调用。您可以使用vias.serial进行串行调用,并 使用vias.multi使用多个内核。默认为vias.serial。
这些方法引发的异常都可以使用ISBNLibDevException捕获。你不应该在你的代码中引发这个异常,只引发在isbnlib.dev中暴露的特定异常,其名称以 Error 结尾。
在isbnlib.dev.helpers中,您可以找到几种我们发现非常有用的方法,其中一些仅用于isbntools(使用isbnlib的应用程序和框架)。
使用isbnlib.config,您可以读取和设置配置选项:使用seturlopentimeout和setthreadstimeout更改超时,使用 apikeys访问 api 密钥并使用add_apikey添加新密钥,使用options.get('OPTION1')访问和设置通用和用户定义的选项和设置选项。
最后,从isbnlib.registry您可以更改默认使用的元数据服务(setdefaultservice),添加新服务(add_service),访问元数据的书目格式化程序(bibformatters),设置默认格式化程序(setdefaultbibformatter),添加新格式化程序(add_bibformatter)并设置一个新的缓存(set_cache)(例如关闭缓存set_cache(None))。缓存仅适用于通过元数据函数调用。这些更改仅适用于“当前会话”,因此应始终在调用其他方法之前完成。
让我们用一个小例子来具体化这些观点。
假设您想要一个小脚本来使用BibTeX 格式的Open Library获取元数据。
一个最小的脚本是:
from isbnlib import meta
from isbnlib.registry import bibformatters
SERVICE = "openl"
# now you can use the service
isbn = "9780446310789"
bibtex = bibformatters["bibtex"]
print(bibtex(meta(isbn, SERVICE)))
插件
您可以通过添加插件来扩展库的功能(目前,只是新的元数据提供者或新的书目格式化程序)。
有关可用插件,请在此处查看。
安装后,您的插件将透明地融合到isbnlib中(您将在meta和bibformatters中有更多选项)。
使用模式
该库实现了一个非常简单的 API,具有合理的默认值,但有些情况需要您注意(参见下面的案例 3)。
您只需要核心功能:
# import the core functions you need
from isbnlib import canonical, is_isbn10, is_isbn13
isbn = canonical("978-0446310789")
if is_isbn13(isbn):
...
...
您还需要使用默认配置的元数据函数:
from isbnlib import canonical, meta, description
isbn = canonical("978-0446310789")
data = meta(isbn)
...
您还需要具有特殊配置的元数据功能:
假设您需要为元数据插件添加 api 密钥并更改缓存。
from myapp.utils import MyCache
# import the functions you need, plus 'config' and 'registry'
from isbnlib import canonical, config, meta, registry
# you should use 'config' first
config.add_apikey("isbndb", "kjshdfkjahsdflkjh")
# then 'registry'
registry.set_cache(MyCache())
# Only now you should use metadata functions
# (there are no adaptions for core functions,
# so they can be used at any moment)
isbn = canonical("978-0446310789")
data = meta(isbn, service="isbndb")
...
您想在代码中构建插件或使用isbnlib.dev:
您应该非常仔细地研究dir(isbnlib.dev)中的公共方法。
注意事项
这些类针对单次调用服务而不是批量调用进行了优化。
如果你检查这个库,你会看到有很多私有模块(它们的名字以'_'开头)。不应直接访问这些模块,因为您的程序很可能会因库的进一步版本而中断!
使用isbnlib 的项目
isbntools https://github.com/xlcnd/isbntools
isbnsrv https://github.com/xlcnd/isbnsrv
打开图书馆 https://github.com/internetarchive/openlibrary
NYPL 图书馆简化 https://github.com/NYPL-Simplified
Manubot https://github.com/manubot
点差 https://github.com/DIYBookScanner/spreads
在此处查看完整列表。
帮助
如果您需要帮助,请查看github或在 stackoverflow上发布问题。