はじめに
本ツールは、国立国会図書館サーチのAPI(SRU)とExcel(WEBSERVICEとFILTERXML)を利用して、
Excelに入力した書名から著者や出版者などの書誌情報をセルに表示します。
注意点として、本ツールでは書名に対して最新の書誌情報1件しか取得しないため、
同一の書名の場合は欲しい情報が得られない場合があります。
また、本ツールでは国立国会図書館サーチのAPIを利用するため、
必ず利用条件をご確認ください。( https://iss.ndl.go.jp/information/api/ )
前提条件
(1) Excelから国立国会図書館のURLへ通信できること
(2) Excelのバージョンが2013以降であること
動作確認PC
(1) Windows 10 Pro Version 1909
(2) Microsoft Office Home and Business 2019
(3) ESET Security 12
簡易取得ツールの作成
(1)Excelの用意
書名を入力する列(①)、WEBSERVICE関数を入力する列(②)、FILTERXML関数を入力する列(取得したいデータ項目数分)(③)を用意します。
(2)WEBSERVICE関数を利用して書誌情報のXMLを取得
②の列に次のWEBSERVICE関数を入力します。
=WEBSERVICE("https://iss.ndl.go.jp/api/sru?operation=searchRetrieve&recordSchema=dcndl&onlyBib=true&recordPacking=xml&maximumRecords=1&startRecord=1&query=title%3d%22"&B4&"%22%20AND%20mediatype%3d%221%22")
・onlyBib=trueで書誌情報のみ取得
・maximumRecords=1で1件のみ取得
・query=titleで書誌のタイトルを検索
・B4はこの場合の書名を入力するセル
詳しくはAPI仕様書をご確認ください。( https://iss.ndl.go.jp/information/api/riyou/ )
(3)FILTERXML関数を利用してXMLから欲しい項目を抽出
③の列に取得したいデータ項目ごとに次のFILTERXML関数を入力します。(C4はこの場合のXMLを取得したセル)
○著者
=FILTERXML($C4,"/searchRetrieveResponse/records/record/recordData/rdf:RDF/dcndl:BibResource/dc:creator")
○出版年月
=FILTERXML($C4,"/searchRetrieveResponse/records/record/recordData/rdf:RDF/dcndl:BibResource/dcterms:date | dcterms:issued")
○出版者
=FILTERXML($C4,"/searchRetrieveResponse/records/record/recordData/rdf:RDF/dcndl:BibResource/dcterms:publisher/foaf:Agent/foaf:name")
○JP番号/ISBN番号
=FILTERXML($C4,"/searchRetrieveResponse/records/record/recordData/rdf:RDF/dcndl:BibResource/rdfs:seeAlso/@rdf:resource")
○URLリンク
=HYPERLINK(FILTERXML($C4,"/searchRetrieveResponse/records/record/recordData/rdf:RDF/dcndl:BibAdminResource/dcndl:record/@rdf:resource"))
参考
APIに問い合わせるURLやFILTERXMLで用いるXPATHの書き方は、API仕様書にくわえて同志社大学図書館情報学研究室(原田隆史教授)のNDL書誌データ検索シート Ver 1.2.3も参考にしています。( http://www.slis.doshisha.ac.jp/~ushi/ToolNDL/ )
おわりに
本ツールは高機能ではないですが、書名さえ入力すれば比較的簡単に書誌情報を取得できます。
ただし、国立国会図書館サーチに登録されている書誌情報に依存するため、入力する書名のスペースの有無などで情報が取得できるか変わります。
また、Excelの更新のタイミングなどXMLをすべて再取得する場合があるので、サーバへの大量通信を防ぐため、図書目録等に実装するのではなく、一時的に書誌情報を取得するツールとして利用した方がよいと思います。