Google Apps Scriptで書籍検索を実装してみる【GAS】

自社や学校等で様々な専門書を持っている所では、貸出管理や蔵書の購入、廃棄など様々な本に関する仕事があります。その中で「この本あったかな?」「現在何名借りてるのか?」などの情報が管理上必要になることはままあります。

今回は自前で持っている蔵書と、オンライン(今回は国会図書館および楽天ブックスのAPIを使ってみます)を検索し、蔵書であるものはで表示し、ないものでも、ISBNコードをクリックすればそのまま、Amazonで検索し買えるまでをアプリケーションにしてみました。会社ではここに、蔵書の追加登録や、廃棄登録、貸出登録や貸出状況の確認などができるように改造を追加する予定です。

今回使用するスプレッドシートやメソッド

事前準備

国会図書館API

国会図書館APIは検索結果を最大で500件までしか返せないので、いろいろと仕組みを考えなければなりませんが、今回は特に絞り込みを設けずに、名前検索で引っ張ります。試しに使用したクエリはこちら

国会図書館APIの場合、事前申請やAPIキーなどはないので、自由に使えますが、相手サーバのレスポンスが遅いです。場合によってはタイムアウトしたりします。ただ、返り値の中には、対象の本や資料がどこの図書館にあるのかがわかったりするので、非常に便利な面と、本だけじゃなく論文的な資料もヒットするので、専門分野での蔵書検索では一役買うと思います。

楽天ブックスAPI側の準備

楽天ブックス書籍検索APIは、事前にアプリケーションIDの取得が必要です。国会図書館同様絞り込みをせず、名前検索で引っ張るようにしました。試しに使用したクエリはこちら

APIの取得手順は以下の通り。楽天IDが必要です。今回はいつものようなOAuth2認証を使わないので、APIキーのみでオッケーです。

  1. 新規アプリ登録画面へ行く
  2. アプリ名、アプリのURL(設置場所等)を入力して、規約に同意して新規アプリを作成をクリック
  3. アプリIDが表示されますので、この値を控えておきます。プログラムの中で使用します。

図:アプリIDがそれになります。ほかの項目は不要です。

ソースコード

GAS側コード

  • 国会図書館APIは返り値がXML形式であるため、パース作業が必要になります。ネームスペースの指定など結構面倒なコードになってます。
  • 楽天ブックス書籍検索APIは返り値がJSON形式であるため、そのまま取得値を取り出すことが可能です。
  • それぞれの取得し成型したデータの形式は同一にし、HTML側へ返しています。
  • 排他制御を入れている理由は、複数名同時にアクセスしてきた場合に、自分の権限だけで動かしている場合、UrlfetchAppの連続リクエスト制限に掛かる為。ゆえにこのアプリは、アクセスしてきた人間の権限で動かすようにしたほうがベスト。
  • 両者共に、自分のMyBooksシート記載の書籍にあるかどうかのチェックをしています。ある場合にはが返るようにしています。
  • 楽天ブックス書籍検索APIは一気に検索データを取得できず、何ページにもわかれているため、ページ数を取得後にループで何度も残りのデータを取得するようになっています。
  • また、1ページあたり最大30件にリターン値しかないので、短いワードだと何度もリクエストが発生する為、Sleepを入れてUrlfetchAppのリクエスト制限を回避しています。
  • 楽天ブックス書籍検索APIの返り値のうち、日付に関して「日の無い、いい加減な出版日」であったり、余計な文字列、空欄になってるデータに対して対処するように、変換コードが入っています。
  • 数値については、カンマ区切りに円をつけるように、正規表現にて返り値をリプレースしています。

HTML側コード

  • 今回はいつもと違い、Bootstrap3ライブラリでUIを構築しています。よって、アラートメッセージなどがちょっと呼び出し方が変わったやり方になっています。
  • テキストボックス内でEnterにて、検索ができるようにコードを追加しています。
  • 返り値はTable方式で生成し、innerHTMLで挿入しています。Class指定はBootstrap3のライブラリを利用するために付与しています。
  • セレクトメニューの内容に応じて、国会図書館APIおよび楽天ブックス書籍検索APIの2つを切り替えています。

実行と結果

利用方法は簡単。ウェブアプリケーションとしてデプロイしたのちにアクセスし、セットアップを実行後検索するだけ。セットアップはそのシートのIDをスクリプトプロパティに格納しており、所有書籍と検索書籍の結果と突合させる為に利用しています。

ただし、両者のAPIともに、速度面で遅かったり、ページが分けられていてトータル取得が遅いなど、ちょっと面倒が面があります。もっと良い書籍検索APIがあったら良いのですが。GAS側も連続アクセスでUrlfetchAppのリミットに掛からないように、Sleepを入れている為、遅い原因になっています。

ですので、実際には標準で色々絞り込みやトップ100だけ出すなどの対策が必要です。日本のAPIサービスはこういったケースが多いのでなかなか不便ですね。

図:うしおととらを検索してみた

関連リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)