Help us understand the problem. What is going on with this article?

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

More than 3 years have 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

TakeshiNickOsanai
Developer Relation Manager, Sales Engineer/PreSales, User Community Supporter, CMS Engineer, AWS Certified Solutions Architect
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした