PHP Laravel プログラミング

LaravelでGoogleBooksApiを使って書籍情報を取得する方法

プログラミングスクール講師の斉藤です。

今回は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

 

ビュー(View)の処理

ビュー側ではitemsの連想配列をループで回して、必要な情報のみ表示するようにしています。

書籍によっては項目が存在しないケースもあったので、array_key_existsを使って、キー値の存在チェックも行っています。

 

resources/views/index.blade.php

 

サンプルプログラムの置き場所

今回ご紹介したコードはGitHub上にアップロードしてありますので、参考にしてみてください。

サンプルプログラム

 

GoogleBooksApiの注意点

GoogleBooksApiには1日あたりの取得件数制限があります。

上限は1000件/日となっていますので、あまり頻繁に検索されるようなWebサイトでは利用できなくなりますので、ご注意ください。

 

まとめ

自分のWebサイトで書籍情報を扱いたい時、GoogleBooksApiであれば認証も不要ですぐに使えます。

使用する難易度も低め目ですので、APIを利用する足掛かりにしてみてはいかがでしょうか。

 

Laravelを基礎から身に付けるならテックアカデミー。
私もPHP/Laravelコースで講師をしています。




  • この記事を書いた人
  • 最新記事

斉藤 貞義

プロミディア合同会社代表。 北海道札幌市在住。 会社員としてソフトウェア開発を約13年経験後、PE-BANK所属のフリーランスエンジニアとして独立。 その2年半後に法人成りし、合同会社を設立。 現在は企業に常駐してソフトウェア開発をしつつ、収益を目的としてWebサイト作成、セミナーを開催している。

-PHP Laravel, プログラミング

© 2020 プロミディア合同会社