跳转到主要内容

用于Crossref搜索API的低级客户端

项目描述

habanero

pypi docs ghactions coverage black

这是一个用于与Crossref的搜索API工作的低级客户端。它被命名为更通用,因为其他组织将采用Crossref的搜索API,使其能够从一个客户端与所有内容进行交互。

Crossref API文档

其他Crossref API客户端

Crossref的API问题跟踪器: https://gitlab.com/crossref/issues

habanero 包含三个模块,您可以根据需要导入(或导入所有)

Crossref - Crossref搜索API。 Crossref 模块包含与Crossref API路由匹配的方法,以及一些用于获取DOI机构和随机DOI的便捷方法

  • works - /works 路径

  • members - /members 路径

  • prefixes - /prefixes 路径

  • funders - /funders 路径

  • journals - /journals 路径

  • types - /types 路径

  • licenses - /licenses 路径

  • registration_agency - 获取DOI发行机构

  • random_dois - 获取随机DOI集合

counts - 引用计数。包括单个 citation_count 方法

cn - 内容协商。包括以下方法

  • content_negotiation - 获取各种格式的引用

  • csl_styles - 获取CSL样式,在 content_negotation 方法中使用

WorksContainer - 一个处理Crossref作品的类。将Crossref类方法上的作品输出传递给该类,以便更容易地提取作品的具体字段。

关于搜索的说明

您正在使用描述在 https://api.crossref.org/swagger-ui/index.html 的Crossref搜索API。当您使用查询词进行搜索时,在Crossref服务器上,他们不是搜索全文,甚至不是文章的摘要,而是仅搜索返回给您的数据中可用的内容。也就是说,他们搜索文章标题、作者等。有关此问题的讨论,请参阅 https://gitlab.com/crossref/issues/-/issues/101

速率限制

查看当前速率限制的 X-Rate-Limit-LimitX-Rate-Limit-Interval 标头。

礼貌池

要进入礼貌池,现在最好包括一个 mailto 电子邮件地址。有关更多信息,请参阅文档。

安装

稳定版本

pip (or pip3) install habanero

如果您需要使用内容协商修复bibtex格式的引用,请使用

pip (or pip3) install habanero[bibtex]

开发版本

pip install git+https://github.com/sckott/habanero.git#egg=habanero

或自行本地构建

git clone https://github.com/sckott/habanero.git
cd habanero
make install

用法

初始化客户端

from habanero import Crossref
cr = Crossref()

作品路由

# query
x = cr.works(query = "ecology")
x['message']
x['message']['total-results']
x['message']['items']

# fetch data by DOI
cr.works(ids = '10.1371/journal.pone.0033693')

成员路由

# ids here is the Crossref Member ID; 98 = Hindawi
cr.members(ids = 98, works = True)

引用次数

from habanero import counts
counts.citation_count(doi = "10.1016/j.fbr.2012.01.001")

内容协商 - 获取多种格式的引用

from habanero import cn
cn.content_negotiation(ids = '10.1126/science.169.3946.635')
cn.content_negotiation(ids = '10.1126/science.169.3946.635', format = "citeproc-json")
cn.content_negotiation(ids = "10.1126/science.169.3946.635", format = "rdf-xml")
cn.content_negotiation(ids = "10.1126/science.169.3946.635", format = "text")
cn.content_negotiation(ids = "10.1126/science.169.3946.635", format = "text", style = "apa")
cn.content_negotiation(ids = "10.1126/science.169.3946.635", format = "bibentry")

元数据

变更日志

1.2.6 (2024-02-01)

  • 为vcr标记两个更多测试以创建cassettes(两个内容协商测试)- 没有面向用户的变化 (#114)

  • habanero现在有条件地使用bibtexparser来回转bibtex,尝试修复任何未正确格式化的bibtex (#144) (#153)

  • 将处理字段查询(如query.publisher-name)的通用方法,允许所有字段查询,以及未来的任何查询 (#150) (#152)

  • 改进了错误处理 (#123)

  • ids现在是Crossref.prefixes方法中必需的参数;改进了crossef API错误解析 (#116)

1.2.3 (2023-02-02)

  • 现在使用类型提示,在Python 3.6及更高版本上进行了测试;尽管可以与较旧的Python 3版本一起工作。请参阅新的文档以获取有关类型的更多信息 (#70)

  • 修复了使用的问题;在一个for循环中,内部变量在每次循环迭代后没有被重置,结果是在抛出警告之后返回的所有对象都是 (#112) (#113)

1.2.2 (2022-05-19)

  • 修复了类WorksContainer以与作品结果的光标输出(例如,cr.works(query, cursor="*"))一起使用 (#106) 感谢 @IvanSterligov

1.2 (2022-03-27)

  • 添加了类WorksContainer以简化作品数据的处理 (#101)

  • 将github开发仓库中的master分支更改为main (#103)

  • 排除测试安装 (#105)

1.0 (2021-11-12)

  • 修复了docs/contributing.rst和habanero的包级别文档 (#89) (#90) 感谢 @Daniel-Mietchen !

  • 修复了requestRequest的内部处理限制和偏移 (#91) 感谢 @Bubblbu !

  • content_negotation现在在4xx/5xx状态码上抛出警告,允许同时处理不良DOI和良好DOI (#92)

  • 为README添加了查询works的DOI的示例 (#93)

  • 当json没有返回时,失败得更好;尝试json.loads并捕获ValueError(JSONDecodeError是ValueError的子类) (#97)

  • fundersjournalsmembersprefixestypesworks获得了参数,以便在找不到DOI时可以选择抛出警告而不是错误 - 找不到DOI且返回

0.7.4 (2020-05-29)

  • query.title过滤器已弃用,请使用query.bibliographic代替 (#85)

0.7.2 (2019-12-12)

  • Crossref()类获得了ua_string选项,可以添加一个字符串到每个请求中发送的用户代理 (#84)

0.7.0 (2019-11-08)

  • filter_names()filter_details()已更改,以获取作品、成员和资助者的元数据;并添加了成员和资助者方法的示例,以使用过滤器 (#67)

  • 修复了许多错误 (#80) 感谢 @Radcliffe !

  • 现在在获取作品路由数据时,可以使用进度条功能,仅在执行深度分页时,请参阅进度条参数(#77)(#82)

  • 内容协商修复:现在必须提供ids参数(没有默认值),并且必须是一个字符串或字符串列表(#83)

  • 不再在Python 2下进行测试

0.6.2 (2018-10-22)

  • 从pypi发行版中缺少变更日志,现已修复(#71)

  • 修复了Crossref.registration_agency()方法,上一个更改中损坏了它(#72)

  • content_negotiation()方法中的响应文本设置UTF-8编码以修复编码问题(#73)

  • 修复了Crossref.filter_names()方法;不再对dict_keys进行排序(#76)

0.6.0 (2017-10-20)

  • 添加了对额外Crossref搜索过滤器的验证和文档(#62)

  • 对readthedocs上的文档进行了重大改进(#59)

  • 添加了对mailto的支持(#68)(#63)以及关于礼貌池的相关文档(#66)

  • 添加了对