👏

OAI-PMHリポジトリからPythonでレコードを全件取得する

2024/07/14に公開

OAI-PMHリポジトリからPythonでレコードを全件取得するスクリプトです。参考になりましたら幸いです。

import requests
from requests import Request
import xml.etree.ElementTree as ET

# エンドポイントの定義
base_url = 'https://curation.library.t.u-tokyo.ac.jp/oai'

# OAI-PMH リクエストの初回実行
params = {
    'verb': 'ListRecords',
    'metadataPrefix': 'curation',
    'set': '97590'
}

response = requests.get(base_url, params=params)

# 初回リクエストの準備
req = Request('GET', base_url,params=params)
prepared_req = req.prepare()
print("Sending request to:", prepared_req.url)  # URLを出力

root = ET.fromstring(response.content)

data = []

# 全データの取得
while True:
    # レコードの処理
    for record in root.findall('.//{http://www.openarchives.org/OAI/2.0/}record'):
        identifier = record.find('.//{http://www.openarchives.org/OAI/2.0/}identifier').text
        print(f'Record ID: {identifier}')
        # 他のデータもここで処理可能

        data.append(record)

    # resumptionTokenの取得と次のリクエストの実行
    token_element = root.find('.//{http://www.openarchives.org/OAI/2.0/}resumptionToken')
    if token_element is None or not token_element.text:
        break  # トークンがない場合、ループを終了

    params = {
        'verb': 'ListRecords',
        'resumptionToken': token_element.text
    }
    response = requests.get(base_url, params=params)
    root = ET.fromstring(response.content)

print("全件取得が完了しました。")

print(len(data))

Discussion