国会図書館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;
}