見出し画像

Filemakerで蔵書管理アプリ(その5)楽天booksAPIで書籍情報を取得する

Filemakerで蔵書管理アプリを作る話、今回は楽天BooksのAPIで情報を取得することについてです。なお、本稿は有料になっていますが本文は全て無料で、最後の有料部分で作成したデータをダウンロードできるようになっています。

楽天のAPIを使用するにはIDが必要

楽天は書籍に限らず、楽天市場で販売されてる商品や楽天トラベルのAPIも提供しています。書籍系の検索でも、雑誌や電子書籍(kobo)、CDの検索機能も提供しています。

使用するには固有のアプリIDが必要です。固有IDは楽天IDをお持ちであればログインし、基本的な情報を登録すればすぐに発行されます。テストフォームが用意されているので、登録せずとも試しに使ってみることもできます。

実際に取得できるデータ

それではテストページに実際の検索条件を入れて、検索してみます。
「楽天ブックス系API」「楽天ブックス書籍検索API」を指定し、返却形式は「xml」、取得件数を返す「hits」パラメータを追加し、「1」に設定してISBNを入力するとURL欄に自動でテキストが生成されます。このURLはテストフォーム専用のものなので、ブラウザに直接このURLを入れてもエラーが返ってきます。ここまではIDを発行しなくても可能ですが、ログインしてIDを発行した状態で行うとURLにアプリIDが組み込まれますので、そのまま使えるようになります。

https://webservice.rakuten.co.jp/explorer/api

入力後、送信[GET]ボタンを押すとその下のフォームに返されるXMLが表示されます。以下にコピーします。わかりやすいように、今回使用する部分のタグを太字にしたものを以下に記載します。

<?xml version="1.0" encoding="UTF-8"?>
<root>
<GenreInformation />
<Items>
<Item>
<affiliateUrl></affiliateUrl>
<author>養老 孟司</author>
<authorKana>ヨウロウ タケシ</authorKana>
<availability>1</availability>
<booksGenreId>001010010001/001020014/001028001003</booksGenreId>
<chirayomiUrl></chirayomiUrl>
<contents></contents>
<discountPrice>0</discountPrice>
<discountRate>0</discountRate>
<isbn>9784106100031</isbn>
<itemCaption>イタズラ小僧と父親、イスラム原理主義者と米国、若者と老人は、なぜ互いに話が通じないのか。そこに「バカの壁」が立ちはだかっているからである。いつの間にか私たちは様々な「壁」に囲まれている。それを知ることで気が楽になる。世界の見方が分かってくる。人生でぶつかる諸問題について、「共同体」「無意識」「身体」「個性」「脳」など、多様な角度から考えるためのヒントを提示する。</itemCaption>
<itemPrice>858</itemPrice>
<itemUrl>https://books.rakuten.co.jp/rb/1547008/</itemUrl>
<largeImageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/0031/9784106100031_1_3.jpg?_ex=200x200</largeImageUrl>
<limitedFlag>0</limitedFlag>
<listPrice>0</listPrice>
<mediumImageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/0031/9784106100031_1_3.jpg?_ex=120x120</mediumImageUrl>
<postageFlag>2</postageFlag>
<publisherName>新潮社</publisherName>
<reviewAverage>3.42</reviewAverage>
<reviewCount>808</reviewCount>
<salesDate>2003年04月10日頃</salesDate>
<seriesName>新潮新書</seriesName>
<seriesNameKana>シンチョウシンショ</seriesNameKana>
<size>新書</size>
<smallImageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/0031/9784106100031_1_3.jpg?_ex=64x64</smallImageUrl>
<subTitle></subTitle>
<subTitleKana></subTitleKana>
<title>バカの壁</title>
<titleKana>バカノカベ</titleKana>
</Item>
</Items>
<carrier>0</carrier>
<count>1</count>
<first>1</first>
<hits>1</hits>
<last>1</last>
<page>1</page>
<pageCount>1</pageCount>
</root>

楽天booksAPIの検索結果

販売サイトゆえに価格や楽天booksの商品ページへのリンク、評価がある以外に、サイトに掲載されてる説明文、判型、シリーズ名が取得できます。それから、書影の画像URLがサイズ違いで3種類含まれているので、改めてURLを生成してリクエストしなくても取得できること、タイトルがサブタイトルと分けて格納されているのが特徴的です。
より細かい説明はこちらの公式API詳細「出力パラメータ」の項に掲載されてます。

最初にこのアプリを作ろうと試みた2014年時点では、蔵書管理を目的にしていたので、基本はNDL分類を取得できる国会図書館サーチで取得して、のちに書影を取得できることがわかったため、補完的に楽天を使い始め、そこから大きく改修することなく運用をしていたのですが、現在であれば楽天をベースにしてもよいかもしれません。

実装してみます

データベースの管理画面フィールドを設定し、読み込む項目をレイアウトします。
表示範囲の外に検索結果のXMLと、書影URLを格納するテキストボックスを配置しておきます。

実際のURLは次のようになります。取得したアプリIDは固定ですので、[アプリID]を置き換えた文字列にISBNコードを流し込む計算フィールドでURLを作ります。

https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404?format=xml&isbn=[13桁のISBN]&hits=1&applicationId=[アプリID]

この結果として返されるXMLをテキストフィールド[検索結果]に読み込み、タグを目印に各項目をPosition関数とMiddle関数を使って拾い上げていきます。(詳しいやり方はこの連載の「その3」に載せてますのでご覧いただけますと幸いです。)
ここでは、楽天のフォーマットに合わせてサブタイトルのフィールドを設け、サブタイトルのよみがなは省略しています。filemakerの機能である、クイック検索(フィールドに関係なく入力した語句で検索)を可能にのためにはあった方が良いと思います。
書影URLは大中小ありますが、ラージサイズで200×200px程度ですので、自分で想定している500タイトル程度であればパフォーマンスにそこまでの影響はないと思うのでラージサイズにしています。
項目を全て抽出し、各フィールドに入力した後にXMLを一度全部削除して、国会図書館サーチを読み込み、NDC分類番号のみを抽出しています。
*国会図書館サーチの仕様が変更されまして、現状では読み込めなくなりました。対応が完了しましたら新たに記事として公開します。
スクリプトステップは以下のようになります。

関数部分が見切れてしまっていますので、参考例として書影URLを取得する関数を示します。
「ほん::検索結果」はフィールド名です。

Middle ( ほん::検索結果 ; Position (ほん::検索結果 ; "<largeImageUrl>" ; 1 ; 1 ) + 15 ; Position ( ほん::検索結果 ; "</largeImageUrl>" ; 1 ; 1 ) -Position ( ほん::検索結果 ; "<largeImageUrl" ; 1 ; 1 ) - 15 )

実際にスクリプトを動かしてみます。ISBNコードを入力するだけでその書籍に関する情報が取得できました。(サブタイトルが無いので空欄になっています)

今回はここまで。次回はデータベースとしてより使えるものにするためのチューニングのことを書こうと思います。
業務の合間に制作しながら書いてますので少し間が開くかもしれません。

今回も、作成したFilemakerアプリをこの下の有料部分でダウンロードできるようにしておきます。お手持ちのiPhoneでバーコードを読んで遊んでみてください。

ここから先は

63字
この記事のみ ¥ 100
期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?