Edited at

Google Books API からJSONデータを取得してjQueryで処理する

More than 1 year has passed since last update.

Google Books API + Movable Type で書籍管理システムを作る その4です。今回は、Google Books API について、簡単に解説します。

サンプルコードでは、以下のようなことをやっています。


  • 登録フォームから入力されたISBNコードを利用して、Google Books API からデータを取得

  • 取得したJSONデータを、jQueryで取得

  • 取得した書籍データを、登録画面に表示


Google Books API とは

Google が提供するAPIの一つです。

Google が提供するサービスの一つに「Google ブックス」があります。

https://books.google.com/?hl=ja

世界中の書籍情報を収め、検索することによって詳細情報が取得できるサービスです。

(ただし、登録状況にはばらつきがあり、日本のベストセラーでも収録されていないケースが散見されます)

Google ブックスについては、Wikipedia に詳細が記述されています。

https://ja.wikipedia.org/wiki/Google_%E3%83%96%E3%83%83%E3%82%AF%E3%82%B9

Google Books API は、この「Google ブックス」に登録されているデータを、API経由で取得できるサービスとなります。開発者向けのドキュメントはこちらです。

https://developers.google.com/books/

余談ですが、Googleブックスに登録されている書籍は、必ずしも一般発売されている書籍ばかりではありません。中には、著作権が切れた書籍や、研究文献などの収録されています。

以下は、夏目漱石の「こころ」に関するページと、Google Books API から取得できるJSONデータです。

https://books.google.co.jp/books?id=Jb3GNmCzcIoC

https://www.googleapis.com/books/v1/volumes?q=id:Jb3GNmCzcIoC

このデータには、ISBNがありません。書籍販売サービスであるAmazon や楽天ブックスなどとは、ちょっと異なるデータベースとなっています。


Google Books API の使い方

Google Books API のエンドポイントは、以下に記載があります。

https://developers.google.com/books/docs/v1/reference/

これとは別に、検索エンジンを使うように、検索クエリをエンドポイントに投げることでデータを取得することもできます。この使用方法の場合、APIキーを使わずに、書籍情報を取得することができるため、気軽に利用できます。

https://developers.google.com/books/docs/v1/using

書き方は、以下のように、

https://www.googleapis.com/books/v1/volumes?q=search+terms

として、q以降に [検索したい項目:検索語] としてURIを叩きます。検索できる項目は、下記に一覧があります。

https://developers.google.com/books/docs/v1/using#WorkingVolumes

利用上限は1000件/1日のようです。

http://qiita.com/minodisk/items/934903a937813fcf1e30


ISBNを利用して、Google Books APIからJSONデータを取得する

実際に、Google Books API からデータを取得してみます。

今回は、ISBNを使って検索することにしました。

例として、古川日出男さんの小説「アラビアの夜の種族」を、ISBNで検索してみます。

アラビアの夜の種族 文庫版第1巻は、以下に詳細情報があります。

https://books.google.co.jp/books?id=s4CRHAAACAAJ

ISBNは


  • ISBN13


    • 9784043636037



  • ISBN10


    • 4043636032



となっています。

Google Books APIでは、ISBN13、ISBN10どちらでも検索が可能です。

ここでは、ISBN13で検索してみます。

https://www.googleapis.com/books/v1/volumes?q=isbn:9784043636037

上記URLにアクセスすると、「アラビアの夜の種族」のJSONデータが表示されるので、jQueryを使って各値を取得します。

// フォームID [isbn] に入力があった場合、jQueryの関数 [change] を使ってISBNコードを取得。

// Google Books APIへ問い合わせを行う。
// もしGoogle Books APIに書籍が存在しない(totalItemsが0の場合)、入力欄に表示されたデータをすべて消去し、該当書籍がないとメッセージを表示する

$("#isbn").change(function() {
const isbn = $("#isbn").val();
const url = "https://www.googleapis.com/books/v1/volumes?q=isbn:" + isbn;

$.getJSON(url, function(data) {
if(!data.totalItems) {
$("#isbn").val("");
$("#BookTitle").text("");
$("#BookAuthor").text("");
$("#isbn10").text("");
$("#isbn13").text("");
$("#PublishedDate").text("");
$("#BookThumbnail").text("");
$("#BookDescription").text("");
$("#BookMemo").val("");

$("#message").html('<p class="bg-warning" id="warning">該当する書籍がありません。</p>');
$('#message > p').fadeOut(3000);

} else {

// 該当書籍が存在した場合、JSONから値を取得して入力項目のデータを取得する

$("#BookTitle").text(data.items[0].volumeInfo.title);
$("#isbn13").text(data.items[0].volumeInfo.industryIdentifiers[0].identifier);
$("#isbn10").text(data.items[0].volumeInfo.industryIdentifiers[1].identifier);
$("#BookAuthor").text(data.items[0].volumeInfo.authors[0]);
$("#PublishedDate").text(data.items[0].volumeInfo.publishedDate);
$("#BookDescription").text(data.items[0].volumeInfo.description);
$("#BookThumbnail").html('<img src=\"' + data.items[0].volumeInfo.imageLinks.smallThumbnail + '\" />');

}

});
});

ISBNで検索した場合、書籍データは必ず1件のみになります。このため、配列の1件目にあたる、data.items[0]に格納されているデータ = ISBNに対応した書籍データとみなしました。

data.items[0] の中にある各JSONデータを、それぞれ取得して、登録画面を書き換え表示しています。

全体のコードは以下です。

https://github.com/Nick-smallworld/mt-theme-BookShelf-sample/blob/master/themes/Bookshelf-sample/templates/main_index.mtml