Google API 第18回

投稿者: | 2015年10月1日

今回はGoogle Books APIsを紹介します。
Google Books APIsにはBooks APIとEmbedded Viewer APIがあります。
Books APIはGoogle BooksをAPI化したもので本の検索をすることができます。
Embedded Viewer APIはウェブサイトに本のコンテンツを埋め込むことができるAPIです。

通常、本を検索する際はウェブサイト検索やAmazonなどのショッピングサイトを利用しますが、
検索しても本が見つからないことやショッピングサイトに置いていないことがあると思います。
そういう時Google Booksを利用すると、世界中の本の中から求めている本を検索することができます。

そんなGoogle Booksをより深く知ってもらいたいので
2回に分けてGoogle Books APIsについて説明します。
今回はBooks APIの特徴、概念、使用方法について説明します。

■Books APIの特徴
・本をキーワードで簡単に検索できる
・タイトル、価格、プレビューのリンクなど本の情報を取得できる
・本棚を使用できる
・Java、JavaScript、PHP、Pythonなどの言語に対応
などの特徴があります。

■Books APIの概念
Books APIはボリューム、本棚、レビュー、リーディングポジションという4つの概念で構成されています。
ボリュームは本や雑誌についてのデータです。
本棚はボリュームを格納する場所です。ユーザごとに本棚があり、公開することができます。
レビューはボリュームについてのレビューです。ユーザはボリュームごとにレビューを書くことができます。
リーディングポジションはユーザがボリュームを最後に開いた位置です。

■Books APIの使用方法
Book APIではボリュームの一覧情報取得、本棚の一覧情報取得・追加・更新・削除ができます。

ここではJavaScriptを用いて
本を検索しボリュームの一覧情報を取得する方法と本棚の一覧情報を取得する方法を説明します。

・本を検索しボリュームの一覧情報を取得する
まずJavaScriptで読み込ませるコードを記述します。


qには検索するキーワードを指定します。
callbackにはコールバック関数を指定します。
その他download、filter、langRestrict、maxResults、orderBy、
printType、projection、startIndex、volumeIdといったパラメータがあります。

返り値は下記のようなJSONで取得できます。
リクエストしたデータはitemsに配列として格納されています。
items内の主要なパラメータを説明します。
idは一意となる本のIDです。
volumeInfoのtitleは本のタイトル、authorsは作者名です。
publisherは出版者名です。
descriptionは本の概要です。
previewLinkはプレビューを表示するためリンクです。
buyLinkは本を購入するためリンクです。

{
 "kind": "books#volumes",
 "totalItems": 1242,
 "items": [
  {
   "kind": "books#volume",
   "id": "ob_Wat8KuOwC",
   "etag": "+a36Ztzxdpc",
   "selfLink": "https://www.googleapis.com/books/v1/volumes/ob_Wat8KuOwC",
   "volumeInfo": {
    "title": "小学校受験問題集・模試の活用法",
    "authors": [
     "野倉学"
    ],
    "publisher": "株式会社オールアバウト",
    "publishedDate": "2013-01-15",
    "description": "小学校受験の対策は基本、問題集と模試の活用の2本柱。ペーパー対策はやっぱり必要で、加えて模試を受けることによって入試本番に慣れていくことが大切です。(総合情報サイト「All About」に2009年04月01日に掲載された情報を書籍化しました)",
    "readingModes": {
     "text": true,
     "image": true
    },
    "printType": "BOOK",
    "categories": [
     "Education"
    ],
    "maturityRating": "NOT_MATURE",
    "allowAnonLogging": false,
    "contentVersion": "2.1.4.0.preview.3",
    "imageLinks": {
     "smallThumbnail": "http://books.google.co.jp/books/content?id=ob_Wat8KuOwC&printsec=frontcover&img=1&zoom=5&edge=curl&source=gbs_api",
     "thumbnail": "http://books.google.co.jp/books/content?id=ob_Wat8KuOwC&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api"
    },
    "language": "ja",
    "previewLink": "http://books.google.co.jp/books?id=ob_Wat8KuOwC&printsec=frontcover&dq=%E5%95%8F%E9%A1%8C%E9%9B%86&hl=&cd=1&source=gbs_api",
    "infoLink": "http://books.google.co.jp/books?id=ob_Wat8KuOwC&dq=%E5%95%8F%E9%A1%8C%E9%9B%86&hl=&source=gbs_api",
    "canonicalVolumeLink": "http://books.google.co.jp/books/about/%E5%B0%8F%E5%AD%A6%E6%A0%A1%E5%8F%97%E9%A8%93%E5%95%8F%E9%A1%8C%E9%9B%86_%E6%A8%A1%E8%A9%A6%E3%81%AE%E6%B4%BB%E7%94%A8.html?hl=&id=ob_Wat8KuOwC"
   },
   "saleInfo": {
    "country": "JP",
    "saleability": "FOR_SALE",
    "isEbook": true,
    "listPrice": {
     "amount": 35.0,
     "currencyCode": "JPY"
    },
    "retailPrice": {
     "amount": 32.0,
     "currencyCode": "JPY"
    },
    "buyLink": "http://books.google.co.jp/books?id=ob_Wat8KuOwC&dq=%E5%95%8F%E9%A1%8C%E9%9B%86&hl=&buy=&source=gbs_api",
    "offers": [
     {
      "finskyOfferType": 1,
      "listPrice": {
       "amountInMicros": 3.5E7,
       "currencyCode": "JPY"
      },
      "retailPrice": {
       "amountInMicros": 3.2E7,
       "currencyCode": "JPY"
      }
     }
    ]
   },
   "accessInfo": {
    "country": "JP",
    "viewability": "PARTIAL",
    "embeddable": true,
    "publicDomain": false,
    "textToSpeechPermission": "ALLOWED",
    "epub": {
     "isAvailable": true,
     "acsTokenLink": "http://books.google.co.jp/books/download/%E5%B0%8F%E5%AD%A6%E6%A0%A1%E5%8F%97%E9%A8%93%E5%95%8F%E9%A1%8C%E9%9B%86_%E6%A8%A1%E8%A9%A6%E3%81%AE%E6%B4%BB%E7%94%A8-sample-epub.acsm?id=ob_Wat8KuOwC&format=epub&output=acs4_fulfillment_token&dl_type=sample&source=gbs_api"
    },
    "pdf": {
     "isAvailable": true,
     "acsTokenLink": "http://books.google.co.jp/books/download/%E5%B0%8F%E5%AD%A6%E6%A0%A1%E5%8F%97%E9%A8%93%E5%95%8F%E9%A1%8C%E9%9B%86_%E6%A8%A1%E8%A9%A6%E3%81%AE%E6%B4%BB%E7%94%A8-sample-pdf.acsm?id=ob_Wat8KuOwC&format=pdf&output=acs4_fulfillment_token&dl_type=sample&source=gbs_api"
    },
    "webReaderLink": "http://books.google.co.jp/books/reader?id=ob_Wat8KuOwC&hl=&printsec=frontcover&output=reader&source=gbs_api",
    "accessViewStatus": "SAMPLE",
    "quoteSharingAllowed": false
   },
   "searchInfo": {
    "textSnippet": "小学校受験の対策は基本、問題集と模試の活用の2本柱。ペーパー対策はやっぱり必要で、加えて模試を受けることによって入試本番に慣れていくことが大切です。(総合情報サイ ..."
   }
  }
...
 ]
}

取得したJSONはコールバック関数で処理することができます。
JSONを処理することでGoogle Booksと同じように本の一覧を表示することができます。
※JSONをコールバック関数で処理する方法は参考サイトのGoogle API 第16回を参照してください。

・本棚の一覧情報を取得する
まずJavaScriptで読み込ませるコードを記述します。


USER_IDには本棚に使用されるユーザのIDを指定します。
callbackにはコールバック関数を指定します。

返り値は下記のようなJSONで取得できます。
リクエストしたデータはitemsに配列として格納されています。
items内の主要なパラメータを説明します。
idは0~8で指定され、お気に入りや読書中、既読などを表します。
selfLinkはその本自身のリンクです。
titleは本棚の名前です。
accessは公開または非公開を表します。

{
 "kind": "books#bookshelves",
 "items": [
  {
   "kind": "books#bookshelf",
   "id": 0,
   "selfLink": "https://www.googleapis.com/books/v1/users/xxxxxxxxxxxxxxxxxxxxx/bookshelves/0",
   "title": "Favorites",
   "access": "PUBLIC",
   "updated": "2015-09-28T06:40:09.185Z",
   "created": "2015-09-28T06:40:09.185Z",
   "volumeCount": 1,
   "volumesLastUpdated": "2015-09-28T06:40:09.181Z"
  }
 ]
}

取得したJSONは本の検索の時と同様にコールバック関数で処理することができます。
JSONを処理することでGoogle Booksと同じように本棚の一覧が表示できます。

以上がBooks APIの説明になります。

上記の通り、Books APIを使用するとGoolge Booksと同様に
検索や本棚の一覧情報を取得することができます。
本の検索や本棚の一覧情報の取得だけではなく、URLを変更するだけで
自分の本棚に本を追加することや本のレビューを書くことができます。

このBooks API用いると検索したい本のジャンルに特化した検索サイトや、
Embedded Viewer APIと組み合わせてプレビューに特化したサイトを作ることができます。
興味を持って頂けたならBooks APIを是非試していただきたいです。

次回は、ウェブサイトに本のコンテンツを埋め込むことができる
Embedded Viewer APIについて紹介します。

<参考サイト>
Books API
Google API 第16回