見出し画像

iPhoneで本のバーコードを読み取り、最寄りの図書館にあるか調べる

本屋で見つけた本のバーコードを読み取り、最寄りの図書館にあるかを調べるshortcutsを作りました。気になる本を見つけたけれどその場では買えない時などに利用しています。iPhoneのshortcutsと図書館APIを使っています。

作ったものを置いておきます。事前に①アプリケーションキーの申請②自分が利用する図書館のシステムID取得をする必要があります。準備で解説しているので、使い始める前に準備までは読み進めてください。どちらもとても簡単です。


準備

準備するもの

  • 図書館API(カーリル)

    • アプリケーションキーの申請

    • 図書館のシステムID

  • iPhone

    • ショートカットアプリ

図書館APIのアプリケーションキーの申請

本の検索はカーリルというサイトの図書館APIを利用しています。カーリルの図書館APIは全国7000以上の図書館にアクセスでき、蔵書のあり/なしや貸出中ステータス、予約URLまで取得できます。

カーリルの図書館APIを使うために、まず開発者プロフィールを登録します。カーリルのページ内でダッシュボードページを開き、「開発者プロフィールの登録」に進んでください。

ダッシュボードページでは個人名とメールアドレスを効かれます。これらを記入してから利用規約に同意して利用するボタンを押してください。

次にアプリケーションキーを申請します。「新しいアプリケーションの追加」を押してください。

登録ページでアプリ名を入力して登録するだけです。

これでアプリケーションキーが発行されます。このアプリケーションキーを控えておいてください。

なお、アプリケーションキーは個人で保管するようにしてください。他人に公開することはカーリルの利用規約でも禁止されていますので、注意してください。

図書館のシステムID

カーリルの図書館API仕様のページです。

この中で、システムIDは次のように説明されています。これはつまり、これがわかれば自分の調べたい図書館の蔵書を調べることができるということです。

システムIDは、各図書館が導入している蔵書管理システムの固有の識別子で「Kanagawa_Fujisawa」のようなアルファベットとアンダーラインによって構成されています。 一つのシステムIDには多くの場合、複数の図書館/図書室が紐付いています。 市に一つのシステムIDがあり、市内の全ての図書館・図書室が含まれていることが多いですが、複数の市町村で共同で一つのシステムIDがある場合や、合併などによって一つの市に複数のシステムIDがあることもあります。 システムIDは、後述する図書館データベースから取得できます。 本APIで扱う文字コードはUTF-8に統一されています。

身近な図書館のシステムIDを予め取得しておけば図書館の蔵書を調べられます。「図書館データベース」で自分が利用する図書館を検索してみましょう。私が利用しているのは東京都品川区の図書館ですが、都道府県と市区町村を指定して検索すると次のようになります。

https://api.calil.jp/library?appkey={アプリケーションキー}&pref=東京都&city=品川区

「東京都(都道府県)」と「品川区(市区町村)」は日本語のままで大丈夫です。これをブラウザで開くと図書館一覧がXML形式で表示されます。ちょっとわかりづらいですが、頑張って図書館名を探してください。

自分が利用する図書館名を見つけると、すぐそばに「systemid」という項目があります。それがシステムIDです。東京都品川区の場合は「Tokyo_Shinagawa」ですね。これも控えておきます。

以上でアプリケーションキーとシステムIDが取得できました。このページでショートカットをDLした方はショートカットの初回起動時に聞かれますので、それぞれ入力してください。

ここから先は実際のshortcutsの作り方のご紹介です。


Shortcutsを作る

いよいよshortcutsを作ります。手順は次のとおりです。

  • バーコードを読み取ってISBNを取得する

  • ISBNを使って図書館の蔵書を検索する

バーコードを読み取ると「ISBN」と呼ばれる英数になります。これは「International Standard Book Number」の略で、世界共通で書籍を特定するための番号です。
バーコードの読み取りはあとにまわして、まずは図書館の蔵書を検索する方を先に作ります。

ISBNを使って図書館の蔵書を検索する

まずは先程取得した図書館APIのアプリケーションキーと図書館のシステムIDを使って、本を検索する部分を作ります。サンプルとして適当なISBNを設定しておきます。ここはあとでバーコードの読み取りに置き換えます。

ISBN、アプリケーションキー、システムIDをそれぞれ変数に設定し、URLを作って内容を取得します。パラメータはURL内に変数として渡しています。

結果はJSONで扱うので、フォーマットとコールバックもパラメータを指定しています。

https://api.calil.jp/check?appkey={アプリケーションキー}&systemid={システムID}&isbn={ISBN}&format=json&callback=no

この時点で一度shortcutsを動かしてAPIを叩くと、次のような結果が返ってきました。

{
  "session":"6e65b5bea5fcc4257f7490e49148c4f8",
  "continue":1,
  "books":{
    "415209575X":{
      "Tokyo_Shinagawa":{
        "status":"Running",
        "reserveurl":""
      }
    }
  }
}

API仕様によると「continue = 1」はまだすべての取得が完了していないことを示しています。蔵書情報の取得にかかる時間は図書館システムによって異なるようで、長いと20秒近くかかるそうです。そのため、セッションIDを使って何回か叩いてみることが推奨されています。

shortcutsであまり複雑なことはしたくないです。何回か叩いてみて1秒前後かかっていたので、2秒の間隔をあけて全部で2回取得するようにしました。ここはうまく取得できない場合には秒数の調整を試してみてください。
一度目の結果からseesionを抜き出しておき、2回目の検索で使います。

https://api.calil.jp/check?appkey={アプリケーションキー}&session={セッションキー}&format=json&callback=no

2回目は結果が変わっています。continueが0になっているので、すべての取得が完了しているようです。蔵書の状況もわかりますね。大井で貸出中になっているようです。

{
  "session":"6e65b5bea5fcc4257f7490e49148c4f8",
  "continue":0,
  "books":{
    "415209575X":{
      "Tokyo_Shinagawa":{
        "status":"Cache",
        "libkey":{"大井":"貸出中"},
        "reserveurl":"https:\/\/www.shinagawa-lib.jp\/opw\/OPW\/OPWSRCHTYPE.CSP?DB=LIB&FROMFLG=1&BID=B11934480"
      }
    }
  }
}

これは個人の図書館の利用方法にもよるかもしれませんが、どの図書館にあるか、貸出中かどうかはあまり重要ではありません。予約をすれば登録しておいた図書館に届けて通知してくれるからです。そのためこのshortcutsでは蔵書があるかどうかがわかれば十分としています。
蔵書の有無は「libkey」を見ればわかります。蔵書がない場合は結果が空になっています。次の結果は蔵書がない場合です。

{
  "session":"daaf495a060c576d93e04e891dae97ec",
  "continue":0,
  "books":{
    "123456789X":{
      "Tokyo_Shinagawa":{
        "status":"OK",
        "libkey":{},
        "reserveurl":""
      }
    }
  }

libkeyを見て空ならshortcutsを終了します。蔵書があれば予約ページを開きます。

これでISBNから図書館を検索できました。APIの結果に予約ページも含まれているので、これはこのままブラウザで開くだけです。

バーコードを読み取ってISBNを取得する

最初にテキストで仮置していた変数「Isbn」の入力を「QRまたはバーコードをスキャン」に置き換えるだけで完了ですが、テストの結果読み取ったコードを一度表示するようにしました。

日本の本にはバーコードが2つついていますが、下のコードは「日本図書コード」と呼ばれるものでISBNではありません。そのため、誤って下のコードを読み取ってしまった場合は本が検索できず、蔵書なしと判断されていまいます。shortcutsのバーコード読み取りを何回か試してみたところ、下のコードが読まれやすく、蔵書がないと言われてしまうことが多かったです。
そのため読み取ったときに一度読み取り結果を表示して、間違っているときには読み取り直すようにします。

iPhoneで起動すればちゃんと動きます

これで完成です!


まとめ

今回は図書館APIを使い、本のバーコードを読み取って身近な図書館に蔵書があるかを検索するshortcutsを作りました。APIと言われると難しいものに感じられるかもしれませんが、実際の作業は数ステップで終わります。これだけで図書館の蔵書を調べられるので便利です。ぜひ使ってみてください。


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