2
1

ISBNコードから書誌情報を取得する

Last updated at Posted at 2024-07-14

任意の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'}

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1