Invenio 的 OAIPMH 收割机库。仅用于开发,不用于生产。
项目描述
OARepo OAI-PMH 收割机
适用于 Invenio 3.5+ 的 OAI-PMH 采集库。该库提供了将 OAI-PMH 有效负载初始转换为中间 json 表示的功能,该中间 json 表示随后由特定的转换器转换为 invenio 记录。
由于它们的通用性,这些转换器不是该库的一部分,而是必须由应用程序提供。
在数据库中捕获进度和转换错误。
目前,该库不提供错误通知,但会添加这些通知。哨兵可能用于记录和报告。
安装
poetry add oarepo-oaipmh-harvester
配置
所有配置都在数据库模型OAIHarvesterConfig中。有一个命令行工具可以添加新配置:
invenio oaiharvester add \
--code nusl \
--name NUŠL \
--url "http://invenio.nusl.cz/oai2d/" \
--set global \
--prefix marcxml
--transformer nusl_oai.transformer.NuslTransformer
这将使用代码“nusl”、它的 url、oai 集和元数据前缀注册一个 oai-pmh 收割机。来自该收割机的记录将在写入存储库之前由 NuslTransformer 进行转换。
选项:
Usage: invenio oaiharvester add [OPTIONS]
Options:
--code TEXT OAI server code [required]
--name TEXT OAI server name [required]
--url TEXT OAI base url [required]
--set TEXT OAI set [required]
--prefix TEXT OAI metadata prefix [required]
--parser TEXT OAI metadata parser. If not passed, a prefix-based default is used
--transformer TEXT Transformer class [required]
用法
命令行
在命令行上,调用
oaiharvester harvest nusl <optional list of oai identifiers to harvest>
选项:
-a, --all-records Re-harvest all records, not from the last timestamp
--background Start Harvest on background (via celery task), return immediately
--dump-to TEXT Do not import records, just dump (cache) them to this
directory (mostly for debugging)
--load-from TEXT Do not contact oai-pmh server but load the records from
this directory (created by dump-to option)
芹菜任务
@shared_task
def oai_harvest(
harvester_id: str,
start_from: str,
load_from: str = None,
dump_to: str = None,
on_background=False,
identifiers=None):
"""
@param harvester_id: id of the harvester configuration (OAIHarvesterConfig) object
@param start_from: datestamp (either YYYY-MM-DD or YYYY-MM-DDThh:mm:ss,
depends on the OAI endpoint), inclusive
@param load_from: if set, a path to the directory on the filesystem where
the OAI-PMH data are present (in *.json.gz files)
@param dump_to: if set, harvested metadata will be parsed from xml to json
and stored into this directory, not to the repository
@param on_background: if True, transformation and storage will be started in celery tasks and can run in parallel.
If false, they will run sequentially inside this task
@param identifiers: if load_from is set, it is a list of file names within the directory.
If load_from is not set, these are oai identifiers for GetRecord. If not set at all, all records from
start_from are harvested
"""
收获情况
每次收获都会在数据库表中创建一行,OAIHarvestRun其中包含第一个和最后一个日期戳和收获状态(正在运行、已完成、出错……)
一次运行被分割成一块记录,每个块都在OAIHarvestRunBatch数据库表中表示。它包含一个块状态(正在运行、已完成、警告、失败……)和一个已收获的标识符列表及其状态(好的,在收获标识符期间发出警告,收获标识符失败)。该表还包含警告/错误的详细信息。
自定义解析器和转换器
输入的 OAI xml 首先通过解析器解析为 json 格式。
开箱即用支持 MARC-XML 和 DC 解析器。如果您需要不同的解析器,请参阅下面的部分
然后通过转换器类将 JSON 转换为 invenio 记录。由于不同的存储库使用不同的字段语义(即使在 MARC 中),这一步不能通用,实现者需要提供他/她自己的转换器类。
变压器
一个简单的转换器,它只转换来自 MARC-XML 输入的标题可能看起来像:
from typing import List
from oarepo_oaipmh_harvester import OAITransformer, OAIRecord, OAIHarvestRunBatch
from my_record.proxies import current_service
from my_record.records.api import MyRecord
class NuslTransformer(OAITransformer):
oaiidentifier_search_property = 'metadata_systemIdentifiers_identifier'
# the name of service filter that accesses the record's OAI identifier
oaiidentifier_search_path = ('metadata', 'systemIdentifiers', 'identifier')
# path to the oai record identifier inside the record
# invenio service that will be used to create/update the record
record_service = current_service
# invenio record for this record
record_model = MyRecord
def transform_single(self, rec: OAIRecord):
# add all your transformations here
rec.transformed.update({
'metadata': {
'title': rec['24500a']
}
})
解析器
解析器负责将 XML 文档转换为中间 JSON。
有关实现细节,请参阅MarcxmlParser。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
oarepo_oai_pmh_harvester -3.1.3-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 5143282d6c1f377bf1dffcf3fa1dd31f3ebedaa91eb3830db5cc972d9b68ff31 |
|
| MD5 | 646257a9eee076e630adfc69e57886a1 |
|
| 布莱克2-256 | 1ac55676fec98a5041f673b9754f519300337213533bdc1bd0d5fffe4b6702c1 |