国会図書館APIを使用する

概要

国立国会図書館が提供しているAPIを利用して書誌情報を取得する方法。
書影APIも提供されているが、画像があまり返ってこないような気がするので、書影を取得できなかった場合の分岐を描く方がいいかも。

また、今回使用する検索用APIは国会図書館側のサーバーでCORS対応がされていないため、PHPで取得するようにしています。ブラウザで直接APIのURLを叩けばXML形式で取得は可能。

参考(いずれも国立国会図書館のWebサイトより)

CORS対応

以下ヘッダーを付与する

<?php
  header('Access-Control-Allow-Origin: *');
?>

情報を取得する

内容的にSRUを使用。

$isbn = 'ISBNコード';
$api_url = 'https://iss.ndl.go.jp/api/sru?operation=searchRetrieve&recordPacking=xml&recordSchema=dc&maximumRecords=1&query=isbn=' .$isbn;
$srw = 'info:srw/schema/1/dc-v1.1';
$dc = 'http://purl.org/dc/elements/1.1/';

$xml_hndl = simplexml_load_file($api_url);

//値をセット
$title = $xml_hndl->records->record->recordData->children($srw)->dc->children($dc)->title;
$author = $xml_hndl->records->record->recordData->children($srw)->dc->children($dc)->creator;
$publisher = $xml_hndl->records->record->recordData->children($srw)->dc->children($dc)->publisher;

//カバー画像取得
$cover_api = 'https://iss.ndl.go.jp/thumbnail/' .$isbn;
$cover_api_decode = json_decode($cover_api, true);
if($cover_api_decode === null) {
	//代替画像などを用意する
	$cover_img = '/lib/images/noimage.png';
} else {
	$cover_img = $cover_api;
}