LoginSignup
2

More than 1 year has passed since last update.

posted at

updated at

ISBNで詳しい書籍情報を取得 (国立国会図書館API)

国立国会図書館APIを使用した詳しい情報を出す方法が探してもなかったので、公式が出している書籍管理Excelのマクロの中身を探して何とかAPIのリンクをゲットできたので備忘録として載せておく。

探してダメなら、、、

探してたらこんなものを見つけた。
もしやと思ってマクロをのぞいたら、、、APIのリンクが使われている!ってなったので処理を追って組み合わせてみた。

https://iss.ndl.go.jp/api/sru

まずこれはアクセス先のリンクなので最初に置く。

operation=searchRetrieve

どうやらこれは必須なようなので入れる。

version=1.2

APIを利用するときに互換性を保つために指定。

recordSchema=dcndl

これが重要っぽい。
デフォルトだと、dcになっていてまともな情報が出ない。

onlyBib=true

書籍以外のIDとかの情報はいらないので返さないように指定。
ちなみにdcndlに指定してないと使えないっぽい

recordPacking=xml

データのパッキング方法指定。stringでも行けるけど、私はとりあえずxmlにした

query=isbn="XXXXXXXXXXXXX"

そしたらISBNを指定する。完全一致じゃないと出てこないようなので、安心。XXXXXXXXXXXXX の部分に任意のISBNを代入する。

dpid=iss-ndl-opac

ついでにqueryに追加
これをつけないと国立国会図書館オンライン以外のDBからもデータを取得するようなので指定して取得するデータを一つにする。queryのところのやつなのでANDをつけて付加する

API

長々と書いたが、要するにこれをAPIとして使えばいい。 XXXXXXXXXXXXXは任意のISBN

https://iss.ndl.go.jp/api/sru?operation=searchRetrieve&version=1.2&recordSchema=dcndl&onlyBib=true&recordPacking=xml&query=isbn="XXXXXXXXXXXXX" AND dpid=iss-ndl-opac

C-Sharp

因みにC-Sharpで利用するとこうなる
Jsonに変換したりもできるので一応書いてる。

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Web;
using System.Xml;

var ISBN = 0000000000000;
var uri = $"https://iss.ndl.go.jp/api/sru?operation=searchRetrieve&version=1.2&recordSchema=dcndl&onlyBib=true&recordPacking=xml&query=isbn=\"{ISBN}\" AND dpid=iss-ndl-opac";
var xml = HttpUtility.HtmlDecode(new HttpClient().GetStringAsync(uri).Result);

var doc = new XmlDocument();
doc.LoadXml(xml);
var json = JsonConvert.SerializeXmlNode(doc);
var jObject = JObject.Parse(json);
Console.WriteLine(jObject.ToString());

参考

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
What you can do with signing up
2