国立国会図書館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());
#参考