プログラミングスクール講師の斉藤です。
今回はPHP/LaravelでGoogleBooksApiを使って書籍情報を取得する方法をご紹介します。
GoogleBooksApiを利用するにあたっては、認証の手続きは不要です。
直接APIを実行して結果を受け取るだけですので、難易度はAmazon apiより低めになっています。
サンプルプログラムの概要
今回ご紹介するサンプルプログラムの機能は以下の通りです。
・書籍名で検索
・書籍名、サムネイル、著者、発売年月、ISBNコード、概要を一覧表示
処理のポイント解説
GuzzleHttpを使ってHTTPリクエストを発行する
今回はHTTPリクエストを発行するために、GuzzleHttpを使用します。
【インストールコマンド】
$ composer require guzzlehttp/guzzle
【使い方】
use宣言
use GuzzleHttp\Client;
インスタンス生成
$client = new Client();
HTTPリクエスト
$response = $client->request(“GET”, [リクエストするURL]);
GoogleBooksApiのURL
書籍名で検索するので、qのパラメータに対して検索語を設定します。
https://www.googleapis.com/books/v1/volumes?q=書籍名 &country=JP&tbm=bks
また、日本語検索する場合はurlencodeをかまして上げないと正しく検索されませんので注意してください。
レスポンスの処理
レスポンスのBody部分w取得
$body = $response->getBody();
Json形式を連想配列に変換
$bodyArray = json_decode($body, true);
レスポンスの中身
GoogleBooksApiを使って検索すると、該当する書籍の情報がレスポンスされてきます。
書籍情報はitems内に入っているので、その部分だけを使います。
$items = $bodyArray[‘items’];
ちょっと見づらいかもしれませんが、レスポンスの中身はこんな感じ。
詳細はGoogleBooksApiの公式サイトのコチラをご参照ください。
サンプルプログラムの解説
実際にLaravelでどう書いたかを簡単に解説していきます。
コントローラの処理
クライアントコンピュータから「の検索キーワードは$request->keyword」に入っています。
処理の流れはこれまで解説した通りです。
最後、itemsの内容をビューに渡しています。
app/Http/Controllers/BooksController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<?php namespace GoogleBooksSample\Http\Controllers; use Illuminate\Http\Request; //Clientクラスを使用する use GuzzleHttp\Client; class BooksController extends Controller { /** * 一覧表示 */ public function index(Request $request) { $data = []; $items = null; if (!empty($request->keyword)) { // 検索キーワードあり // 日本語で検索するためにURLエンコードする $title = urlencode($request->keyword); // APIを発行するURLを生成 $url = 'https://www.googleapis.com/books/v1/volumes?q=' . $title . '&country=JP&tbm=bks'; $client = new Client(); // GETでリクエスト実行 $response = $client->request("GET", $url); $body = $response->getBody(); // レスポンスのJSON形式を連想配列に変換 $bodyArray = json_decode($body, true); // 書籍情報部分を取得 $items = $bodyArray['items']; // レスポンスの中身を見る //dd($items); } $data = [ 'items' => $items, 'keyword' => $request->keyword, ]; return view('index', $data); } } |
ビュー(View)の処理
ビュー側ではitemsの連想配列をループで回して、必要な情報のみ表示するようにしています。
書籍によっては項目が存在しないケースもあったので、array_key_existsを使って、キー値の存在チェックも行っています。
resources/views/index.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>PHP/LaravelでGoogle books apiを使うサンプル</title> </head> <body> <h1>PHP/LaravelでGoogle books apiを使うサンプル</h1> <form action="/" method="get"> 書籍名:<input type="text" name="keyword" size="50" value="{{ $keyword }}"> <input type="submit" value="検索"> </form> @if ($items == null) <p>書籍名を入力してください。</p> @else (count($items) > 0) <p>「{{ $keyword }}」の検索結果</p> <hr> @foreach ($items as $item) <h2>{{ $item['volumeInfo']['title']}}</h2> @if (array_key_exists('imageLinks', $item['volumeInfo'])) <img src="{{ $item['volumeInfo']['imageLinks']['thumbnail']}}"><br> @endif @if (array_key_exists('description', $item['volumeInfo'])) 著者:{{ $item['volumeInfo']['authors'][0]}}<br> @endif @if (array_key_exists('description', $item['volumeInfo'])) 発売年月:{{ $item['volumeInfo']['publishedDate']}}<br> @endif <br> @foreach ($item['volumeInfo']['industryIdentifiers'] as $industryIdentifier) {{ $industryIdentifier['type'] }} : {{ $industryIdentifier['identifier'] }} <br> @endforeach <br> @if (array_key_exists('description', $item['volumeInfo'])) 概要:{{ $item['volumeInfo']['description']}}<br> @endif <br> <hr> @endforeach @endif </body> </html> |
サンプルプログラムの置き場所
今回ご紹介したコードはGitHub上にアップロードしてありますので、参考にしてみてください。
GoogleBooksApiの注意点
GoogleBooksApiには1日あたりの取得件数制限があります。
上限は1000件/日となっていますので、あまり頻繁に検索されるようなWebサイトでは利用できなくなりますので、ご注意ください。
まとめ
自分のWebサイトで書籍情報を扱いたい時、GoogleBooksApiであれば認証も不要ですぐに使えます。
使用する難易度も低め目ですので、APIを利用する足掛かりにしてみてはいかがでしょうか。