SIN'S LAB

技術系の備忘録

国立国会図書館の書誌データを使ってみる (更新)

はじめに

 2019/4/1から国立国会図書館で提供している書誌データが利用目的に関わらず使えるようになるとのことです。

 自身の研究でデータ利用のためのAPIを使ったことがあったため、これが誰でも自由に利用できるようになるというのはとても素晴らしいことだと思い、その使用方法について簡単に書いてみたいと思います。
 
 ですが、ツイートのリンクにあるサイトに書いてあるように、今後国立国会図書館さんの方から使い方等について情報が提供されていくということです。私が使っていた時とは仕様が変更される場合もあるかもしれないので、詳細は公開されていく情報をご覧ください。

書誌データとは

 まず、そもそも、書誌データとは何でしょうか?
 皆さんもご存知の通り、図書館には多くの資料があります。これらの1つ1つの資料を明確に区別するためのデータが書誌データとなります。
ですが、単なる記録データとは異なる部分もあります。それが書誌データというのは、資料の同定識別のための重要なデータであるということです。

 例えば、次のような資料があることもあります(例は[1]から)。
   井堀利宏著『入門マクロ経済学』(新世社
   中谷巌著『入門マクロ経済学』(日本評論社
 この時、記録用のデータとして、著者名や出版社のデータが不明確であると、タイトルが同じであるため利用者の方は検索したときに、本当に欲しい方の資料を手に入れることができなくなる可能性があります。
 また、一見、1つデータがあればいいような同じ資料についても、版が異なることがあり、きちんと考慮され、管理されたデータがなければ膨大な資料の中から的確に探すことは困難になってしまいます。

 このように、ある資料を他にある資料と同じなのか、異なる資料なのかを判別する(識別同定する)ためのデータが書誌データというわけです。

 内容としては、基本的な項目として、タイトルや著者名や出版社、ISBNなどが挙げられ、それら以外にも索引や図表等も含む場合があります。これらの項目は適当に決められるのではなく、今回のの書誌データであれば、国立国会図書館が定める方針に則り作成、管理され、また提供されています。
→ 基本方針|国立国会図書館―National Diet Library

国立国会図書館の書誌データ

 国立国会図書館で提供している書誌データは、国立国会図書館サーチで使われているもので、この国立国会図書館サーチが持つデータをAPIを通して利用する形になっています。
 以下は、国立国会図書館サーチで提供しているAPIの種類です。
  ・検索用API
   → 今回はこちらが対象です。
  ・ハーベスト用API
  ・書影API
   → これも最近できたもので、書影(本の表紙)画像を習得することができます。
 
 この検索用APIを使うことで、国立国会図書館サーチに検索をかけ、その結果として書誌データを取得することができます。

 以前は非営利目的の利用では無償で、営利目的での利用や大量にデータを取得する場合には申請が必要でしたが、「はじめに」で述べたように4月からは誰でも自由に利用することが可能になります。

※ 書誌データの中身についてや国立国会図書館サーチとはどういうものなのかについては長くなりそうなので今回は省略します。
ですが、詳細については以下から見ることができます。
メタデータ « 国立国会図書館サーチについて
国立国会図書館サーチについて « 国立国会図書館サーチについて

検索APIの使用

APIの詳細については、今回の記事では省略しますが、利用の手順としては複雑なものではありません。
API(リクエストの仕方等も含む)についての詳細は以下のAPI仕様書が公開されています。
http://iss.ndl.go.jp/information/wp-content/uploads/2018/09/ndlsearch_api_20180925_jp.pdf

i. リクエスト(URL)の作成
ii. リクエストの送信
ii. 結果の取得

f:id:f_eclair:20190220134419p:plain:w400

ここでのリクエスト(URL)というのは以下のようなものです。

f:id:f_eclair:20190220134702p:plain:w400

オレンジ下線のクエリ部分で、自身が検索したい条件を指定し、欲しい結果を書誌データとして取得することができます。
データは基本的にはXML形式で返ってきます(API利用時に選択するプロトコルによる)。

また、以下に書誌データの取得の簡単な実装例を挙げておきます。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class Test {

   public static void main(String[] args) {

	   //クエリ部分
	   //"三宅陽一郎"で著者名検索を行います(取得数を10に限定してあります)
	   //また、注意が必要なのがクエリ部分にあるquery=の中身の部分についてはURIエンコードを行わなければなりません
	   String queryElement = "creator=\"三宅陽一郎\"";
	   String queryPart = "operation=searchRetrieve&query="+ URIEncode(queryElement) + "&maximumRecords=10";

	   String baseURLPart = "http://iss.ndl.go.jp/api/sru?";

	   //ベースURL部分とクエリ部分をくっつけて完成です
	   String request = baseURLPart + queryPart;

	   System.out.println(request);
	   String result = "";
		try {
			URL url = new URL(request);
			URLConnection con = url.openConnection();
			try (BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"))) {
				while (reader.ready()) {
					result += reader.readLine() + "\n";
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		System.out.println(result);
   }

   //URIエンコードを行うためのメソッド
   static String URIEncode(String target) {
		String encoded = null;
		try {
			encoded = URLEncoder.encode(target, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return encoded;
	}
}

このコードで作成したリクエストのためのURLは以下になります。

http://iss.ndl.go.jp/api/sru?operation=searchRetrieve&query=creator%3D%22%E4%B8%89%E5%AE%85%E9%99%BD%E4%B8%80%E9%83%8E%22&maximumRecords=10

これをブラウザの検索バーに入れると、XML形式の結果を見ることができます。
この結果を見てもらうとわかりますが、ここでは取得する資料タイプを指定していないため、書籍以外のものも含まれています。

以上が、国立国会図書館の書誌データとデータの利用方法についてです。ですが、かなり大雑把であるため、分かりやすくした記事も書きたいと考えています。

また、既に触れましたが、国立国会図書館サーチで各APIについてや利用方法などについての資料を公開されており、4月にむけて最新情報も公開されていくため、そちらも併せてご覧ください。

参考文献

※重ねてですが、国立国会図書館APIや書誌データについては、資料が公開されていますのでぜひご覧ください。

[1] 東京外国語大学, 書誌情報について
[2] JEPA|日本電子出版協会 書誌情報とは?