国会図書館サーチ API で書籍情報をまとめて取得-python

国会図書館の検索サービス(NDL Search)で書籍にかんする諸々の情報を取得できるようです。

検索の対象は国会図書館の蔵書だけではなく、全国各地のさまざまな研究機関、図書館の蔵書、さらにデジタルデータが含まれており、青空文庫のようなサービスも検索可能なようです。

検索には以下の6種類のプロトコルが用意されています。

  • SRU
  • SRW
  • OpenSearch
  • OpenURL
  • Z39.50
  • OAI-PMH

概略はこちら
国立国会図書館サーチについて
技術面はこちら
外部提供インタフェース(API)

やりたいこと

さっそく使ってみました。
やりたかったのは、キーワードに合致する書籍から、それぞれタイトルと著者、出版社、出版年をまとめて取りだし csv に保存するという処理です。しかし、残念ながら NDL Search には制限事項があり、500件しかデータが取得できないようです。

500件の壁

500件というのは、つまり
2000年以降に出版された「人工知能」に関する書籍 を検索し、仮に該当書籍が 1000冊あったとしても 500件しか情報を取得できないということです。
かなり残念

OpenSearch

仕様書をざっと見ただけですが、6種類のプロトコルのうち OpenSearch が簡単そうなのでこのプロトコルで実装することにします。

主な検索キー

検索キーの一部です。

dpid
データプロバイダ ID データを提供するさまざまな機関に振られた ID
指定すると、特定のデータにしぼって検索できる。
たとえば、青空文庫を指定する場合は 「dpid=aozora」 とする。

title
書籍タイトル。必ずしもタイトルだけではなく、シリーズ名や細目などとも突き合わせるようです。

creator
著者

from
開始出版年月日

until
終了出版年月日

mediatype

  • 1:本
  • 2:記事・論文
  • 3:新聞
  • 4:児童書
  • 5:レファレンス情報
  • 6:デジタル資料
  • 7:その他
  • 8:障害者向け資料(障害者向け資料検索対象資料)
  • 9:立法情報

mediatype を指定しないとすべての資料が対象になるので、週刊誌記事や論文が大量に返ってきます。

cnt
出力レコード上限値
idx
レコード取得開始位置

XML

サーバーからの取得データは XML です。
item タグが本1冊に相当し、その下に title や author タグが並んでいます

ソース

idx をずらしながら検索を繰りかえして大量のデータを取得する作りにしましたが、サーバー側の制約条件があるので実際には 500件までです。

print 出力

画面に print で表示した結果です。最後の 5冊分。

人名、書名の一部が Shift-Jis にできない

csvファイルにする際、あとでエクセルで開きたいのでエンコーディングは Shift-Jis にするつもりでしたが、エラーになりました。人名、書名の漢字に Shift-Jis 以外の文字が結構あるからです。たとえば

李世乭

アルファ碁と闘った囲碁チャンピョンです。

Shift-Jis はあきらめて utf-8 で保存しました。

コメントはお気軽に