みやちサイト制作所

未経験でもWEBサイト制作で稼ぐためのノウハウまとめ

閉じる

書籍検索APIであるGoogle Books APIsの使い方(PHPでのサンプルコードあり)

Google Books APIsの詳しい使い方

著者名、書籍タイトル、ISBNなどで書籍の情報を得るには、Google Books APIsがかなり手頃で使いやすいです。

  • 特別な認証は必要なし
  • レスポンスまでの速度も早い

とあって、使いやすさ抜群。

一方で、書籍の網羅率には国会図書館サーチなどにはやや劣りますが、使っていて困るレベルでもありません。

ISBN10でもISBN13でも検索ができるので、「書籍情報をちょっと調べたい」というときには最適です。

question
ちょっとAPIを使うのは難しそうで、イマイチ試したことがない…

という人でも、簡単に利用ができます。

miyachi2
APIで書籍情報を取得して画面に出すまでのサンプルコードもあるよ

【この記事の目次】

Google Books APIsは簡単に使える書籍検索API

Google Books APIsは、名前の通りGoogleブックスにある情報を取得できるAPIです。

Googleブックス

【公式】Googleブックス

書籍を検索する際の項目は以下です(リクエスト)。

  • 書籍のタイトル
  • 著者名
  • ISBN10 / ISBN13
  • Googleブックス上のIDなど

APIでは、主に以下の情報が入手できます(レスポンス)。

  • Googleブックス上のID
  • 書籍タイトル / サブタイトル
  • 著者
  • 出版日
  • 書籍についての説明文(あらすじなど)
  • ISBN10 / ISBN13
  • ページ数
  • サムネ画像のURL
  • 言語
miyachi
書籍についての基本情報はだいたい入手できるね

このAPIを利用するには、楽天やAmazonのAPIと違って認証が必要なく、誰でも簡単に利用できます。

Google Books APIsの使い方はとても簡単

Google Books APIsの使い方は、非常に簡単です。

https://www.googleapis.com/books/v1/volumes?q=検索語句

で検索条件を設定するだけで、JSON形式で情報が入手できます。

例えば「夏目漱石」で検索した結果は以下です。
https://www.googleapis.com/books/v1/volumes?q=夏目漱石

{
 "kind": "books#volumes",
 "totalItems": 2633,
 "items": [
  {
   "kind": "books#volume",
   "id": "ve4UAQAAMAAJ",
   "etag": "qShvXniAKhI",
   "selfLink": "https://www.googleapis.com/books/v1/volumes/ve4UAQAAMAAJ",
   "volumeInfo": {
    "title": "日本人が知らない夏目漱石",
    "authors": [
     "ダミアン・フラナガン"
    ],
    ............
  }
}

合計で2633件の情報が取得できました(3行目「totalItems」)。
取得した書籍情報は4行目以降の「items」に格納されています。

検索語句を入れただけで、情報が取得できました。

miyachi
もう少し検索条件(リクエスト)と取得される書籍情報(レスポンス)について、詳しく見ていくね

検索条件(リクエスト)の設定方法

APIで情報を入手するには、基本的にURLの最後の「q=」以降に条件となるテキストを入れます

https://www.googleapis.com/books/v1/volumes?q=検索語句

複数語句を検索キーワードとして設定

検索語句を複数設定したいときは、プラス(+)で繋いでいきます。

例えば、「夏目漱石」「猫」で検索する場合は↓

https://www.googleapis.com/books/v1/volumes?q=夏目漱石+猫

検索語句に条件を設定

検索語句を設定するだけではなく、キーワードに条件を設定したいときもあると思います。

たとえば、以下の場合です。

  • 著者が「夏目漱石」である本
  • タイトルが「吾輩は猫である」の本

などです。

その場合は、以下のように変更となります。

https://www.googleapis.com/books/v1/volumes?q=inauthor:夏目漱石+intitle:吾輩は猫である

項目名:検索するキーワード」として絞り込むことができます。

設定できる項目の中で、主に利用するものをまとめました。

項目名絞り込み条件
intitle:タイトル
inauthor:著者名
isbn:ISBN10もしくはISBN13(どちらでも可)

※このほか、詳しくは公式ドキュメントを参考にしてください。

Using the API  |  Google Books APIs  |  Google Developers

Using the API  |  Google Books APIs  |  Google Developers

取得件数を設定

1回の問い合わせで取得する件数に上限(区切り)を設けたいときは「maxResults」で設定をします。

例えば、「夏目漱石」に関わる書籍を10件取得したいときは↓

https://www.googleapis.com/books/v1/volumes?q=夏目漱石&maxResults=10

「&」で条件を追加していきます。

「maxResults」を設定し、もともとヒットする情報から一部を取得する形にした場合は、合わせて「何ブロック目の情報か」を付け加えることができます

https://www.googleapis.com/books/v1/volumes?q=夏目漱石&maxResults=10&startIndex=0

↑のようにすると、「夏目漱石」でヒットする全2368件のうち、10件ずつに情報を区切り、その1ブロック目(indexでいうと0番目)を取得する、という設定になります。

2ブロック目の情報が欲しいときは、「startIndex」には「1」を設定すればOKです。

具体的には、APIで取得した書籍情報をページャー付きで一定数ずつ表示するプログラムを作りたい場合、

  • 「maxResults」には「1ページに表示したい件数」を設定
  • 「startIndex」には「ページ番号-1」を設定

にするとうまくいく形です。

miyachi2
件数設定のところはあとのサンプルコードを参考にするとわかりやすいよ

取得できる書籍情報(レスポンス)

さきに説明したように、書籍情報は主に「items->volumeInfo」の中にまとめられています。

https://www.googleapis.com/books/v1/volumes?q=inauthor:夏目漱石+intitle:吾輩は猫である

↑で取得した1冊目の情報は、以下のとおりでした。

{
 "kind": "books#volume",
 "id": "Bdh_RQAACAAJ",
 "etag": "a7hwNLdhdWA",
 "selfLink": "https://www.googleapis.com/books/v1/volumes/Bdh_RQAACAAJ",
 "volumeInfo": {
  "title": "吾輩は猫である",
  "authors": [
   "夏目漱石"
  ],
  "publishedDate": "2010-03",
  "description": "英語教師・珍野苦沙弥の家に住みついた一匹の猫。自らを「吾輩」と称し、発達した知識を持つ名無し猫が、自身の視点から見た人間世界の滑稽さや、珍野家を取り巻く個性的な人物たちの生態を面白おかしく、鋭く風刺的に批評してゆく...夏目漱石の処女小説であり、出世作ともなった近代日本を代表する不朽のユーモア小説を漫画化。",
  "industryIdentifiers": [
   {
    "type": "ISBN_10",
    "identifier": "4781603475"
   },
   {
    "type": "ISBN_13",
    "identifier": "9784781603476"
   }
  ],
  "readingModes": {
   "text": false,
   "image": false
  },
  "pageCount": 184,
  "printType": "BOOK",
  "categories": [
   "Cats"
  ],
  "averageRating": 5.0,
  "ratingsCount": 1,
  "maturityRating": "NOT_MATURE",
  "allowAnonLogging": false,
  "contentVersion": "preview-1.0.0",
  "imageLinks": {
   "smallThumbnail": "http://books.google.com/books/content?id=Bdh_RQAACAAJ&printsec=frontcover&img=1&zoom=5&source=gbs_api",
   "thumbnail": "http://books.google.com/books/content?id=Bdh_RQAACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api"
  },
  "language": "ja",
  "previewLink": "http://books.google.co.jp/books?id=Bdh_RQAACAAJ&dq=inauthor:%E5%A4%8F%E7%9B%AE%E6%BC%B1%E7%9F%B3+intitle:%E5%90%BE%E8%BC%A9%E3%81%AF%E7%8C%AB%E3%81%A7%E3%81%82%E3%82%8B&hl=&cd=1&source=gbs_api",
  "infoLink": "http://books.google.co.jp/books?id=Bdh_RQAACAAJ&dq=inauthor:%E5%A4%8F%E7%9B%AE%E6%BC%B1%E7%9F%B3+intitle:%E5%90%BE%E8%BC%A9%E3%81%AF%E7%8C%AB%E3%81%A7%E3%81%82%E3%82%8B&hl=&source=gbs_api",
  "canonicalVolumeLink": "https://books.google.com/books/about/%E5%90%BE%E8%BC%A9%E3%81%AF%E7%8C%AB%E3%81%A7%E3%81%82%E3%82%8B.html?hl=&id=Bdh_RQAACAAJ"
 },
 "saleInfo": {
  "country": "JP",
  "saleability": "NOT_FOR_SALE",
  "isEbook": false
 },
 "accessInfo": {
  "country": "JP",
  "viewability": "NO_PAGES",
  "embeddable": false,
  "publicDomain": false,
  "textToSpeechPermission": "ALLOWED",
  "epub": {
   "isAvailable": false
  },
  "pdf": {
   "isAvailable": false
  },
  "webReaderLink": "http://play.google.com/books/reader?id=Bdh_RQAACAAJ&hl=&printsec=frontcover&source=gbs_api",
  "accessViewStatus": "NONE",
  "quoteSharingAllowed": false
 },
 "searchInfo": {
  "textSnippet": "英語教師・珍野苦沙弥の家に住みついた一匹の猫。自らを「吾輩」と称し、発達した知識を持つ名無し猫が、自身の視点から見た人間世界の滑稽さや、珍野家を取り巻く個性的な ..."
 }
}

この中には、Googleブックスのシステム情報なども含まれています(GoogleブックスのID、PDFやepubのあり/なし、など)。

ここでは、書籍情報を取得するという目的で利用されることの多い主な項目についてまとめます。

書籍のタイトル・著者名

title」「authors」欄に記載があります。

 "title": "吾輩は猫である",
 "authors": [
  "夏目漱石"
 ],

出版日

publishedDate」に出版日が記載されています。

"publishedDate": "2010-03",

説明文(あらすじなど)

description」は書籍についての説明文です。
本の裏面や見返しなどに記載されているあらすじ / 紹介文などにあたります。

"description": "英語教師・珍野苦沙弥の家に住みついた一匹の猫。自らを「吾輩」と称し、発達した知識を持つ名無し猫が、自身の視点から見た人間世界の滑稽さや、珍野家を取り巻く個性的な人物たちの生態を面白おかしく、鋭く風刺的に批評してゆく...夏目漱石の処女小説であり、出世作ともなった近代日本を代表する不朽のユーモア小説を漫画化。",

ISBN

ISBN10・ISBN13は、「industryIdentifiers」の項目でわかります。

"industryIdentifiers": [
 {
  "type": "ISBN_10",
  "identifier": "4781603475"
 },
 {
  "type": "ISBN_13",
  "identifier": "9784781603476"
 }
],

ページ数

pageCount」は書籍のページ数です。

"pageCount": 184,

サムネ画像

imageLinks」には、書籍画像のURLが記載されています。

"imageLinks": {
 "smallThumbnail": "http://books.google.com/books/content?id=Bdh_RQAACAAJ&printsec=frontcover&img=1&zoom=5&source=gbs_api",
 "thumbnail": "http://books.google.com/books/content?id=Bdh_RQAACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api"
},

小さめの画像「smallThumbnail」と、大きめの画像「thumbnail」に分かれているので、好きな方をチェックしてください。

言語

本が書かれている言語は「language」にあります。

"language": "ja",

日本語は「ja」です。

Google Books APIsを利用するサンプルコード

Google Books APIsを利用して書籍情報を取得するプログラムをPHPで作成した場合のサンプルコードは以下です。

<?php

// 検索条件を配列にする
$params = array(
  'intitle'  => '吾輩は猫である',  //書籍タイトル
  'inauthor' => '夏目漱石',       //著者
);

// 1ページあたりの取得件数
$maxResults = 10;

// ページ番号(1ページ目の情報を取得)
$startIndex = 0;  //欲しいページ番号-1 で設定

// APIの基本になるURL
$base_url = 'https://www.googleapis.com/books/v1/volumes?q=';

// 配列で設定した検索条件をURLに追加
foreach ($params as $key => $value) {
  $base_url .= $key.':'.$value.'+';
}

// 末尾につく「+」をいったん削除
$params_url = substr($base_url, 0, -1);

// 件数情報を設定
$url = $params_url.'&maxResults='.$maxResults.'&startIndex='.$startIndex;

// 書籍情報を取得
$json = file_get_contents($url);

// デコード(objectに変換)
$data = json_decode($json);

// 全体の件数を取得
$total_count = $data->totalItems;

// 書籍情報を取得
$books = $data->items;

// 実際に取得した件数
$get_count = count($books);

?>

<!DOCTYPE html>
<html lang="ja">
<head>
  <title>Google Books APIs</title>
</head>
<body>
  <p>全<?php echo $total_count; ?>件中、<?php echo $get_count; ?>件を表示中</p>

  <!-- 1件以上取得した書籍情報がある場合 -->
  <?php if($get_count > 0): ?>
    <div class="loop_books">

      <!-- 取得した書籍情報を順に表示 -->
      <?php foreach($books as $book):
          // タイトル
          $title = $book->volumeInfo->title;
          // サムネ画像
          $thumbnail = $book->volumeInfo->imageLinks->thumbnail;
          // 著者(配列なのでカンマ区切りに変更)
          $authors = implode(',', $book->volumeInfo->authors);
      ?>
        <div class="loop_books_item">
          <img src="<?php echo $thumbnail; ?>" alt="<?php echo $title; ?>"><br />
          <p>
            <b>『<?php echo $title; ?>』</b><br />
            著者:<?php echo $authors; ?>
          </p>
        </div>
      <?php endforeach; ?>

    </div><!-- ./loop_books -->

  <!-- 書籍情報が取得されていない場合 -->
  <?php else: ?>
    <p>情報が有りません</p>

  <?php endif; ?>

</body>
</html>

APIで必要な情報を得た(1〜44行目)あと、ループで取得した書籍情報を書き出しています(59〜74行目)。

miyachi2
仕様に沿ってリクエストのURLがきちんと作れてさえいれば簡単に使えるね

Google Books APIsの利用に際して注意すること

Google Books APIsを利用する際、注意すべきことが3点あります。

データの網羅率がやや低い

書籍データの網羅率がやや低いところがGoogle Books APIsの欠点でもあります。

普通に書店で並んでいる書籍などでも、情報が見つからないときがたまにあります。

もし網羅率が重要になるのであれば、国会図書館サーチを利用するのも考えてみてください。

miyachi3
ただし、国会図書館サーチはレスポンスまでの時間がかなりかかるのが難点…

取得できるのは「書籍」だけじゃない

Google Books APIsで入手できるのは「Googleブックスに掲載されている」情報です。

Googleブックスには、研究論文なども掲載されています。

よって、APIで取得する情報の中には論文などの「書籍ではないものの情報」も含まれていくるので注意が必要です。

miyachi
ここが国会図書館サーチなどの「書籍」専門のAPIと違うところ

1日の利用上限がある

1日あたりの利用上限は1,000件に設定されています。

Google が提供する API のリクエスト上限数一覧 - Qiita

Google が提供する API のリクエスト上限数一覧 – Qiita

一覧 Service Request limitation Ad Exchange Buyer API 1,000 リクエスト数/日 Ad Exchange…

個人でGoogle Books APIsを利用するときには、1,000件あれば十分だとは思いますが、一般に公開するようなウェブサービスでの利用を考えているときは注意が必要です。

書籍情報を取得するなら、かなり手軽なGoogle Books APIs

認証が必要なく、かなり手軽に使えるGoogle Books APIs

やや網羅率が気になるところですが、誰でも簡単に使え、レスポンスまでの速度は遅くありません。

miyachi2
ちょっと書籍情報が欲しいときには重宝するね

APIを利用するコードも複雑にならないので、API初心者でも使うことができると思います。

この記事に記載したサンプルコードをもとに、ぜひGoogle Books APIsを使ってみてくださいね!

サイトを効率的に作るための
秘蔵ノウハウを発信中

note

開発の基本的な部分はもちろん、コードをより素早く理解して書くための「コツ」をまとめました。15年の開発経験に裏付けられたノウハウをどうぞ!

詳しくはこちら

記事をシェア