交叉引用公用
crossref-commons的Python项目详细描述
交叉引用共用
用于从crossref api(rest,xml,…)获取数据的高级库。正在工作。
安装
pip3 install crossref-commons
用法
检索实体
通过提供各种类型的实体各自的ID,可以检索它们:
import crossref_commons.retrieval
crossref_commons.retrieval.get_publication_as_json('10.5621/sciefictstud.40.2.0382')
crossref_commons.retrieval.get_publication_as_xml('10.5621/sciefictstud.40.2.0382')
crossref_commons.retrieval.get_publication_as_refstring('10.5621/sciefictstud.40.2.0382', 'ieee')
crossref_commons.retrieval.get_member_as_json('15')
等价地,您可以使用get_entity
函数来检索任何类型的实体:
from crossref_commons.retrieval import get_entity
from crossref_commons.types import EntityType, OutputType
get_entity('10.5621/sciefictstud.40.2.0382', EntityType.PUBLICATION, OutputType.JSON)
get_entity('10.5621/sciefictstud.40.2.0382', EntityType.PUBLICATION, OutputType.XML)
get_entity('10.5621/sciefictstud.40.2.0382', EntityType.PUBLICATION, OutputType.REFSTRING, 'ieee')
get_entity('15', EntityType.MEMBER, OutputType.JSON)
检索关系
目前,只支持检索别名:
from crossref_commons.relations import get_alias
get_alias('10.1037//0022-3514.62.3.434')
迭代
可以遍历满足特定条件的出版物(仅限json):
from crossref_commons.iteration import iterate_publications_as_json
filter = {'funder': '10.13039/501100000038', 'type': 'journal-article'}
queries = {'query.author': 'li', 'query.affiliation': 'university'}
for p in iterate_publications_as_json(max_results=189, filter=filter, queries=queries):
print(p['DOI'])
采样
在某些情况下,最好使用随机样本,而不是遍历满足条件的项。get_sample
将自动处理大于crossref rest api的限制100的大小:
from crossref_commons.sampling import get_sample
filter = {'funder': '10.13039/501100000038', 'type': 'journal-article'}
queries = {'query.author': 'li', 'query.affiliation': 'university'}
sample = get_sample(size=121, filter=filter, queries=queries)
授权
您可以通过创建包含以下内容的文件~/.crapi_key
来设置礼貌信息和/或加号标记:
{
"Crossref-Plus-API-Token": "<<Plus API token, for Plus users only>>",
"User-Agent": "<<polite user agent; including mailto:email address>>",
"Mailto": "<<email address>>"
}
或者,可以通过环境变量CR_API_PLUS
、CR_API_AGENT
和CR_API_MAILTO
提供相同的信息。