当サイトには広告が含まれております

楽天ブックス書籍検索APIでISBNコードから書籍情報を表示する:ショートコード編

この記事は最終更新日から5年経過しています。内容が古い可能性があります。

Photo by Thought Catalog on Unsplash

書籍情報は色々なAPIで割と昔から公開されています。最近ではGoogleやAmazon、楽天など書籍を販売しているWEBサイトでもAPIを公開するようになり、より手軽に使えるようになってきました。ISBNコードをいれるだけで書籍の画像や著者名、出版社名などが取得できるので使い出があるかな~と思って、試してみることにしました。まずはISBNコードを渡すだけで書籍情報を表示させるショートコードを作ってみました。

記事をざっと見る

APIとはなんでしょうか?

APIというとこのブログでもお天気情報のAPIなど過去にもご紹介したものがあります。

キーワード:openweathermap

APIとはアプリケーションプログラミングインターフェースの略号で、詳しくはリンク先をご覧ください(^_^;)。

ぼんやりととらえている意味としては「何か公開できるデータベースがあって、urlなどでキーワードなどを渡しデータを要求すればデータベースから該当のデータをjsonとかxmlで返してくれる」というようなものかと思います。

書籍用のAPIはISBNコードという共通のコードやキーワード(著者名や書名など)からその書籍の情報を得ることができるものです。

楽天ブックス書籍検索APIを使ってみる

楽天ブックス書籍検索APIを使ってみたいと思います。

とりあえずどのようなことができるのか?ということをWEBで確認できるページが用意されています。

APIテストフォーム

このページには下記のような

条件を指定する部分があります。この画面で行える検索はAPIを使ってプログラムでも行えることになります。

まずはISBNコードだけを入れてどのような情報が取得できるのかを試してみます。

titlebookGenerateidの内容を消して、ISBNに表示させたい本のISBNコードを入れて、一番下にあるGETボタンをクリック。
※ 日本の書籍にはバーコードが2種類印字されていますが、上にあるコードがISBNコードとなります。

そうすると、

{
  "count": 1,
  "page": 1,
  "first": 1,
  "last": 1,
  "hits": 1,
  "carrier": 0,
  "pageCount": 1,
  "Items": [
    {
      "Item": {
        "title": "実践力を身につける Pythonの教科書",
        "titleKana": "ジッセンリョクヲミニツケル パイソンノ キョウカショ",
        "subTitle": "",
        "subTitleKana": "",
        "seriesName": "",
        "seriesNameKana": "",
        "contents": "",
        "author": "クジラ飛行机",
        "authorKana": "クジラヒコウヅクエ",
        "publisherName": "マイナビ出版",
        "size": "単行本",
        "isbn": "9784839960247",
        "itemCaption": "基本文法から始めてアプリ開発までしっかり解説。話題の「機械学習」も、手順に沿って動かしながら学べます。",
        "salesDate": "2016年10月26日",
        "itemPrice": 2786,
        "listPrice": 0,
        "discountRate": 0,
        "discountPrice": 0,
        "itemUrl": "https://books.rakuten.co.jp/rb/14497545/",
        "affiliateUrl": "",
        "smallImageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/0247/9784839960247.jpg?_ex=64x64",
        "mediumImageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/0247/9784839960247.jpg?_ex=120x120",
        "largeImageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/0247/9784839960247.jpg?_ex=200x200",
        "chirayomiUrl": "",
        "availability": "1",
        "postageFlag": 1,
        "limitedFlag": 0,
        "reviewCount": 2,
        "reviewAverage": "4.0",
        "booksGenreId": "001005017"
      }
    }
  ],
  "GenreInformation": []
}

上記のようなjson形式の情報が表示されました。ざっと見ただけで書籍名や著者名、出版社、書籍の概要などが表示されているのがわかります。

書籍APIはいろいろあったのですが、試しに入れたこのコードで書籍画像のurlが取得できたのと情報が多く分かりやすかったので、このAPIを使おうと思いました。

楽天ブックス書籍検索APIを使うために必要なアプリケーションIDを取得する

楽天ブックス書籍検索APIを利用するにはアプリケーションIDを取得する必要があります。

楽天ブックス書籍検索APIのページ上部にある

アプリID発行をクリックして、アプリケーションIDを取得します。

アプリケーションIDを取得するには楽天にログインする必要があります。こちらからログインすると
※ 会員登録がまだの方はこちらから新規登録します

新規アプリ登録画面に移動しますので、規約を読んでから

アプリ新規作成フォームに必要事項を入力します。

アプリ名:後で見たときにわかるような名前を入力
アプリURL:どのWEBサイトで利用するのかを指定する
アンケート:該当するものにチェックする
認証:画像の数字を入力する

上記入力したら規約に同意して新規アプリを作成をクリック

アプリ登録が完了しましたと表示されます。同じページの下部に

このようにアプリID/デベロッパーIDapplication_secretアフィリエイトIDなどが表示されます。この情報は後で使いますのでコピーして自分のPCなどに保存しておきます。

ISBNから書籍の情報を表示するWordPressのショートコードを作る

ということで、このAPIを使ってISBNから書籍の情報を表示するWordPressのショートコードを作ってみようと思います。

ショートコードは「子テーマのfunctions.php」もしくは「Code Snippetsプラグイン」を利用してどちらかに記述します。

あわせて読みたい
プラグイン「Code Snippets」で機能を追加するとテーマを変更しても大丈夫 仕事でホームページを制作する際にphpでコードを書いてカスタマイズをすることが多いです。その場合、「子テーマのfunctions.php」にコードを書いています。コードは使...

「Code Snippetsプラグイン」を利用する場合はダウンロードしてインポートすれば使えるようなzipを後ほど貼り付けますのでよろしければご利用ください。

こちらの方法についてはネットで検索して

PHPでISBNを用いて楽天ブックス書籍検索APIから本の情報を取得

こちらの記事を参考にさせていただきました。ありがとうございます!

コードはこちらになります

// ショートコード追加
function show_book_information($atts){
    extract(shortcode_atts(array(
        "isbn" => '',
    ), $atts));
    if (!$isbn){
        return '';
    } elseif (strlen($isbn) != 13) {
        return 'isbnは13桁で入力してください';
    }
    /* 固定情報 */
    define('APPLICATION_ID' , '※こちらには自分のアプリケーションIDを入れる※');
    define('AFFILIATE_ID' , '※こちらには自分のアフィリエイトIDを入れる※'); //アフィリエイトの際に必要
    define('ACCESS_URL' , 'https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404?');
    $params = array();
    $params['format'] = 'json';
    $params['applicationId'] = APPLICATION_ID;
    $params['affiliateId'] = AFFILIATE_ID;

    // ショートコードで指定されたISBNコードをセット
    $params['isbn'] = $isbn;

    $requestURL = ACCESS_URL;
    foreach($params as $key => $param){
        $requestURL .= "&{$key}={$param}";
    }

    $request = file_get_contents($requestURL);
    $info = json_decode($request, true);

    //ここでvar_dump($info);とかで確認すると良いよ

    // 出力パラメータを変数に
    if (count($info) != 0) {
        foreach ($info as $key => $Items) {
            if ($key == "Items") {
                // htmlの編集
                return _editRakutenBookInformationHtml($Items['0']['Item']);
            }
        }
    } else {
        // エラー
        return '該当無し';
    }

}
add_shortcode('show_book_information', 'show_book_information');

function _editRakutenBookInformationHtml($item) {
    // 表示したいHTML形式をここで指定する
    $html = '
    <table>
        <tr><th>タイトル</th><td>%s</td></tr>
        <tr><th>著者</th><td>%s</td></tr>
        <tr><th>出版社</th><td>%s</td></tr>
        <tr><th>発売日</th><td>%s</td></tr>
        <tr><th>画像</th><td><img src="%s"></td></tr>
        <tr><th>商品購入ページ</th><td><a href="%s">こちら</a></td></tr>
    </table>
    ';
    return sprintf($html, $item['title'], $item['author'], $item['publisherName'], $item['salesDate'], $item['largeImageUrl'], $item['affiliateUrl']);
}

ショートコードの指定は

[show_book_information isbn=9784838730568]

このような形で、投稿や固定ページなどショートコードが使えるところでしたらどこでも使うことができます。

コードを一部説明します。

    extract(shortcode_atts(array(
        "isbn" => '',
    ), $atts));
    if (!$isbn){
        return '';
    } elseif (strlen($isbn) != 13) {
        return 'isbnは13桁で入力してください';
    }

ここでショートコードから渡ってきたISBNコードがあるかどうか?無ければそのまま終了する、13桁か?13桁でなければエラーメッセージを返すという処理をしています。

次に

    /* 固定情報 */
    define('APPLICATION_ID' , '※こちらには自分のアプリケーションIDを入れる※');
    define('AFFILIATE_ID' , '※こちらには自分のアフィリエイトIDを入れる※'); //アフィリエイトの際に必要
    define('ACCESS_URL' , 'https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404?');
    $params = array();
    $params['format'] = 'json';
    $params['applicationId'] = APPLICATION_ID;
    $params['affiliateId'] = AFFILIATE_ID;

この部分で先ほど取得したアプリケーションIDアフィリエイトIDをセットします(このままのコードではエラーになります)。アフィリエイトIDは必須ではなく、urlをアフィリエイトリンクにしたい場合に指定します。$paramsという配列に値をセットしておきます。
またACCESS_URLは本日(2019/07/17)現在のものです。今後更新があるかもしれませんので、ご利用の際に最新のurlを楽天ブックス書籍検索API

リクエストURLを参照してください。

    $request = file_get_contents($requestURL);
    $info = json_decode($request, true);

この2行で、楽天ブックス書籍検索APIからデータを取得して、JSON エンコードされた文字列を受け取り、それを PHP の変数に変換しています。

    //ここでvar_dump($info);とかで確認すると良いよ

というコメントは参考にさせていただいたコードに入っていたものをそのまま残しました。取得したデータにどのようなものがあるか?ということがvar_dump($info)するとAPIテストで表示したような内容で表示されます。このショートコードでは情報の一部しか表示していませんので、他にも表示したい情報があればどのような値が返ってきているのかを確認したりして表示する項目を追加する際に利用してください。

                // htmlの編集
                return _editRakutenBookInformationHtml($Items['0']['Item']);

あとで修正しやすいようにHTMLの編集部分を関数にしておきました。

function _editRakutenBookInformationHtml($item) {
    // 表示したいHTML形式をここで指定する
    $html = '
    <table>
        <tr><th>タイトル</th><td>%s</td></tr>
        <tr><th>著者</th><td>%s</td></tr>
        <tr><th>出版社</th><td>%s</td></tr>
        <tr><th>発売日</th><td>%s</td></tr>
        <tr><th>画像</th><td><img src="%s"></td></tr>
        <tr><th>商品購入ページ</th><td><a href="%s">こちら</a></td></tr>
    </table>
    ';
    return sprintf($html, $item['title'], $item['author'], $item['publisherName'], $item['salesDate'], $item['largeImageUrl'], $item['affiliateUrl']);
}

この関数で表示部分の編集をしているので、表示の追加削除、htmlやCSSの変更はここで行うことができます。このコードの中で、$item[‘affiliateUrl’]となっているところはアフィリエイト用のurlがリンクとして使われています。アフィリエイトを行わない場合はここを$item[‘itemUrl’]としてください。

このコードをCode Snippetsで使う用のファイルをこちら(書籍apiから表示するショートコード.code-snippets (1))に置いておきます。展開後インポートして、アクティベートすると使えるようになります。

ショートコードを使ってISBNから書籍情報を表示してみる

これで準備が整いましたので投稿などで使ってみたいと思います。

こんな感じに投稿でショートコードを書いてみました。これを表示すると、

こんな感じに、書籍情報をISBNだけで表示させることが出来ます。APIを使うと正確な情報を、楽に表示できるのでとても便利だと思いました。

楽天ブックス書籍検索APIについてはまだ色々と考察することがあります

楽天ブックス書籍検索APIについてはまだ色々と考察することがあります。

もっと沢山の機能がある

今回はISBNを指定して表示させることを行いましたが例えば著者名:堀江貴文の本を複数取得なども行うことができます。いわゆる検索ですね。APIテストページにあった項目、書名、出版社、サイズなどからも検索が可能です。今回は1冊を指定して表示させましたが、検索からアフィリエイトリンク一覧を表示させることでブログ記事の下部にそのブログ記事のキーワードで表示させた書籍の一覧を表示させることも可能だと思います。

しかし制約がある

なのですが、楽天ブックス書籍検索APIには制約もあります。楽天ブックス書籍検索APIページには

※短い時間の間に大量に、同一のリクエストURLへアクセスすると、一定時間利用できなくなる場合がございます。テストの際にはご注意ください。

このような注意書きがあります。短い時間の間に大量にというのはどのぐらいの時間でどのぐらいのアクセスを指すのか?が気になりますね。検索をしてみると1秒に1回までという情報が多かったです。仮にそうだとすると、例えばこのブログのようにある程度アクセスのあるページで楽天ブックス書籍検索APIを使って書籍情報を表示させようとすると、1秒に2回以上API呼び出しをしてしまうという可能性が捨てきれません。ということでこのブログにもAPIを使って表示させないようにしています。このショートコードを使われる場合はアクセスが頻繁にあるページかどうか、ということをご注意いただければと思います。
※ しかし実際1秒に2回以上呼び出しを何度か試してみたのですが今のところ使えなくなったという状態にはならず、正常に動作しています。なので制約についてはこの情報で正しいのかどうかがまだはっきりとはしていません。

APIをその都度呼び出さないようにするには?

ということで、ここまで作成してから「自分のWEBサイトではショートコードは無理かな」と思いました。ちょっとがっかり(^_^;)。ですが、思いついたことがあります。カスタム投稿タイプで書籍というものを作成して、ISBNコードや表示させる項目をカスタムフィールドで作っておく。ダッシュボードの入力画面でISBNコードを入力したら、APIを利用して値を取得し、表示させたい項目のカスタムフィールドに値をセットするというものです。これならAPIを使うのは管理者のみとなるので、このカスタム投稿タイプで入力する人が一人ならば1秒に1回までの制約はクリアできるなと思いました。

ということで実はそこまで作って成功しているのですが、ブログに書くにはちょっと長すぎる&複雑かな~と思ってちょっとだけ躊躇しています。ですがいつか書けるかもしれないのでこの記事のタイトルをショートコード編としておきました。

この記事が気に入ったら
いいね または フォローしてね!

あなたのシェアが励みになります!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントを残す

記事をざっと見る