著者名、書籍タイトル、ISBNなどで書籍の情報を得るには、Google Books APIsがかなり手頃で使いやすいです。
- 特別な認証は必要なし
- レスポンスまでの速度も早い
とあって、使いやすさ抜群。
一方で、書籍の網羅率には国会図書館サーチなどにはやや劣りますが、ISBN10でもISBN13でも検索ができるので、「書籍情報をちょっと調べたい」というときには最適です。
Google Books APIsは簡単に使える書籍検索API
Google Books APIsは、名前の通りGoogleブックスにある情報を取得できるAPIです。
書籍を検索する際の項目は以下です(リクエスト)。
- 書籍のタイトル
- 著者名
- ISBN10 / ISBN13
- Googleブックス上のIDなど
APIでは、主に以下の情報が入手できます(レスポンス)。
- Googleブックス上のID
- 書籍タイトル / サブタイトル
- 著者
- 出版日
- 書籍についての説明文(あらすじなど)
- ISBN10 / ISBN13
- ページ数
- サムネ画像のURL
- 言語
この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": [
"ダミアン・フラナガン"
],
............
}
}
合計で2,633件の情報が取得できました(3行目「totalItems」)。
取得した書籍情報は4行目以降の「items」に格納されています。
検索語句を入れただけで、情報が取得できました。
検索条件(リクエスト)の設定方法
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(どちらでも可) |
※このほか、詳しくは公式ドキュメントを参考にしてください。
取得件数を設定
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」を設定
にするとうまくいきます。
取得できる書籍情報(レスポンス)
さきに説明したように、書籍情報は主に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行目)。
Google Books APIsの利用に際して注意すること
Google Books APIsを利用する際、注意すべきことが3点あります。
データの網羅率がやや低い
書籍データの網羅率がやや低いところがGoogle Books APIsの欠点でもあります。
普通に書店で並んでいる書籍などでも、情報が見つからないときがたまにあります。
もし網羅率が重要になるのであれば、国会図書館サーチを利用するのも考えてみてください。
取得できるのは「書籍」だけじゃない
Google Books APIsで入手できるのは「Googleブックスに掲載されている」情報です。
Googleブックスには、研究論文なども掲載されています。
よって、APIで取得する情報の中には論文などの「書籍ではないものの情報」も含まれているので注意が必要です。
1日の利用上限がある
1日あたりの利用上限は1,000件に設定されています。
個人でGoogle Books APIsを利用するときには、1,000件あれば十分だとは思いますが、一般に公開するようなウェブサービスでの利用を考えているときは注意が必要です。
書籍情報を取得するなら、かなり手軽なGoogle Books APIs
認証が必要なく、かなり手軽に使えるGoogle Books APIs。
やや網羅率が気になるところですが、誰でも簡単に使え、レスポンスまでの速度は遅くありません。
APIを利用するコードも複雑にならないので、API初心者でも使うことができると思います。
この記事に記載したサンプルコードをもとに、ぜひGoogle Books APIsを使ってみてくださいね!