任意のISBNコードを引数として、国立国会図書館のAPIを利用して書誌情報を取得する
ISBNをもとに、書誌情報を取得します。全ての書誌情報が取得できるとは限りませんのであしからず。
APIの仕様なども詳細が載っているので、APIについて学ぶ良い教材ともいえるかもしれません。
参考↓
pythonによる実装
頼むからXMLではなくJSONとかでデータを返してくれないものだろうか リクエストに対する返却値はXMLで返却されます。
print文で出力していますが、変数に格納するなどして色々応用はできるかと思います。
個人的にはGUI化してバーコードリーダーから入力したり、書誌情報をデータベース化できるようなシステムを開発できたら面白いかなと思います。
example01.py
import requests
import xml.etree.ElementTree as ET
def get_bibliographic_information(isbn):
# NDLサーチAPIのエンドポイント
base_url = "https://iss.ndl.go.jp/api/opensearch"
# APIリクエストのパラメータ
params = {
'isbn': isbn,
'format': 'xml'
}
# リクエストを送信
response = requests.get(base_url, params=params)
if response.status_code != 200:
raise Exception(f"Failed to fetch data from NDL API. Status code: {response.status_code}")
# レスポンスの解析
root = ET.fromstring(response.content)
# 書誌情報を抽出
ns = {'dc': 'http://purl.org/dc/elements/1.1/'}
title = root.find('.//dc:title', ns)
creator = root.find('.//dc:creator', ns)
publisher = root.find('.//dc:publisher', ns)
pub_date = root.find('.//dc:date', ns)
# 結果を辞書に格納して返す
bibliographic_info = {
'title': title.text if title is not None else 'N/A',
'creator': creator.text if creator is not None else 'N/A',
'publisher': publisher.text if publisher is not None else 'N/A',
'pub_date': pub_date.text if pub_date is not None else 'N/A'
}
return bibliographic_info
# テスト
isbn = "9784840239219" # 任意のISBNコード
bibliographic_info = get_bibliographic_information(isbn)
print(bibliographic_info)
# {'title': '塩の街', 'creator': '有川, 浩, 1972-', 'publisher': 'メディアワークス', 'pub_date': '2007'}