エイエイレトリック

なぐりがき

国立国会図書館サーチの検索API(SRU)を使う

  • 国立国会図書館APIに触った時のメモ。
  • 短編集の収録作品タイトル一覧を取得するために検索APIを使う。

国立国会図書館サーチ

唐突だが、本のタイトルを思い出せない時、特に短編のタイトルが思い出せない時、ググっても全然出てこないという苦しみを味わったことがあるだろうか。

短編集の収録作品のタイトルって意外とまとめられていない。 出版社のサイトにも、Amazonの商品説明にも、短編集の収録作品が記載されていない。

そんな時に便利なのが国立国会図書館サーチ 。このサイト、国立国会図書館の所蔵情報のみならず、公共図書館大学図書館の資料も検索できる。

そして、詳細情報の部分タイトルから、短編のタイトルを見ることができる。 例えば、 スキャナーに生きがいはない というタイトルの本に 青をこころに、一、二と数えよ などの作品が収録されていることがわかる。

iss.ndl.go.jp

API

国立国会図書館サーチはAPIを公開している (https://iss.ndl.go.jp/information/api/)。

個人利用で、かつ営利目的でなければ特に申請の必要はない。

APIの仕様は https://iss.ndl.go.jp/information/api/riyou/ に記載されており、仕様書pdfもある。

試しに、上記リンク( スキャナーに生きがいはない )の情報をAPIで取得してみる。

検索API

タイトルや著者名から検索して、その結果を取得することを目的とするため、 検索用API を利用する。

4つほど形式があるが、XML形式で帰ってくる SRU か SRW をつかうのが良さそうである。今回はURLで入力できる SRUを使う。

引数

仕様書pdf https://iss.ndl.go.jp/information/wp-content/uploads/2018/09/ndlsearch_api_20180925_jp.pdf があまり丁寧でないので軽く解説を書く。

基本的には

http://iss.ndl.go.jp/api/?sru に必要な引数を足していく。

主な引数は以下の通り。

  • operation (必須)

    • "searchRetrieve" を指定する
  • query=....

    • 検索条件(必須)
      • title, creator, until, from など検索したい条件とキーワードを渡す
    • 仕様はCQL ( https://ja.wikipedia.org/wiki/Apache_Cassandra )
    • 部分一致は = を使う e.g. title="桜" and from="2008" AND until="2008"
    • 完全一致の場合 は exact を使う e.g. creator exact "夏目漱石"
    • utf-8エンコードする必要がある
  • recordSchema

  • onlyBib

    • true を指定すると、書誌情報のみ帰ってくる
    • recordSchema=dcndl にすると、所蔵情報も返ってきて煩雑になるので、指定することでそれを防ぐことができる
  • maximumRecords

    • データの最大取得件数
    • デフォルトが 200 なので指定しないと200件分のデータが返ってきて重い
    • 最初は10~20などを指定すると無難

実際の結果

スキャナーに生きがいはない がタイトルの本を検索する。

引数を以下のように指定する。

http://iss.ndl.go.jp/api/sru?
operation=searchRetrieve
&recordSchema=dcndl # スキーマの設定
&onlyBib=true # 書誌情報のみ
&maximumRecords=10 # 10件取得
&query=title%20exact%20%22%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%8A%E3%83%BC%E3%81%AB%E7%94%9F%E3%81%8D%E3%81%8C%E3%81%84%E3%81%AF%E3%81%AA%E3%81%84%22 # エンコードしたクエリ

結果は以下のURL。

http://iss.ndl.go.jp/api/sru?operation=searchRetrieve&recordSchema=dcndl&onlyBib=true&maximumRecords=10&query=title%20exact%20%22%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%8A%E3%83%BC%E3%81%AB%E7%94%9F%E3%81%8D%E3%81%8C%E3%81%84%E3%81%AF%E3%81%AA%E3%81%84%22

<records><record><recordData> に検索結果の情報が格納されている。

この情報をいい感じに抽出すれば、収録作品が獲得できそうだ。

今回はとりあえずここまで。