無料で読みたい!図書館APIで新書が図書館に登録されたタイミングでLINE通知する(その1)


背景

毎週のように読みたい本が発売されるが、すべて買うにはお金がかかりすぎる
図書館なら読みたい本があれば無料で読める。

しかし、借りたい本は大抵の場合、数人が予約しているため、手元に届くまでには時間がかかる。
例えば、4人予約されていれば2ヶ月(=8週間)待たなければならない・・・
(そんなに読みたいモチベーション保てない)

「図書館に新書が登録された直後なら、予約数が少ないので、早く新書を読むことができるのでは?」

と思いついたので、
図書館APIを使って欲しい本が図書館に登録されたタイミングで通知する仕組みを作ってみる。(作成中)

どうやって実現するか?

  • Google Spreadsheetにチェックする新書タイトル(ISBN)のリストを登録する
  • Google SpreadsheetにGoogle Action Script(=GAS)を登録して、カーリルの図書館APIを定期的に呼び出す
  • 新書が登録されたらLINEに通知する

図書館APIの検証

1. アプリケーションキーを取得する

図書館APIを使用するには、アプリケーションキーが必要となるので
下記のページを参考にして取得する。
http://calil.jp/api/dashboard/

2. 図書館のシステムID(SYSTEM_ID)を調べる

図書館マップ(https://calil.jp/library/) であなたが利用する図書館のシステムIDを調べます。

systemidは、カーリルHPの「図書館マップ」のにも表示されます。
横浜市中央図書館なら下記の赤線部分「Kanagawa_Yokohama」

3. 目的の本の予約状況を確認する

curlを使って予約状況を取得する事はできたが、callbackの扱いがわからなかったので2回curlを実行した。

カーリルAPIで本を探す
API_KEY=${YOUR_API_KEY}
ISBN=4344034082  # メモの魔力
curl -s "http://api.calil.jp/check?SYSTEM_ID=Kanagawa_Yokohamaappkey=${API_KEY}&isbn=${ISBN}&systemid=${SYSTEM_ID}&format=json"

本当は callbackを受けて、session情報をパラメタとして再処理をするはず。。。

実行結果(continue=1の場合
$ curl -s "http://api.calil.jp/check?SYSTEM_ID=Kanagawa_Yokohamaappkey=${API_KEY}&isbn=${ISBN}&systemid=${SYSTEM_ID}&format=json"
callback({"session": "44f4bef4ada10c3e43688027b2c0a15c", "books": {"4344034082": {"Kanagawa_Yokohama": {"status": "Running", "reserveurl": ""}}}, "continue": 1});

2回curlを実行すると処理完了するので一旦いいことにしたwww

実行結果(continue=0の場合
$ curl -s "http://api.calil.jp/check?SYSTEM_ID=Kanagawa_Yokohamaappkey=${API_KEY}&isbn=${ISBN}&systemid=${SYSTEM_ID}&format=json"
callback({"session": "44f4bef4ada10c3e43688027b2c0a15c", "books": {"4344034082": {"Kanagawa_Yokohama": {"status": "OK", "reserveurl": "https://opac.lib.city.yokohama.lg.jp/opac/OPP1500?SELDATA=TOSHO&SSNO=3-0500651500", "libkey": {"港南": "貸出中", "中央": "貸出中", "山内": "貸出中", "金沢": "予約中", "南": "予約中"}}}}, "continue": 0});

ちなみに、図書館に書籍が登録されていない場合は下記のように"libkey"が空となる。

実行結果(図書館に書籍が登録されていない場合)
callback({"session": "849f365f7256856d9c9b2498cee0824a", "books": {"4344034001": {"Kanagawa_Yokohama": {"status": "OK", "reserveurl": "", "libkey": {}}}}, "continue": 0});

図書館APIの検証まとめ

  • callbackの仕組みが使われている。
  • 図書館に書籍が登録されていない場合は、"libkey"が空{}になる。
  • なので、google spreadsheetのGASで"libkey"に値があれば、新書が登録されたと判定できる!!

まぁ、「ちゃんとcallback処理して、jsonパースしろ!」って感じですが、一旦動くものを作ります( ・ิω・ิ)

今日はここまで!

参考ページ