地域図書館の貸出記録を取得

これまで図書館で借りた本など、読んだ本の情報は手作業で書き留めていました。

でも図書館のホームページには例えば貸出延長したりできるようなサービスがあって、今自分が借りている図書の一覧を表示してくれるんですよね。これを利用しない手は無いと思い、貸出図書一覧を自動的に取得してデータベースに登録するシェルスクリプトを作成してみました。

とにかくログインするのが苦労しました。

 "https://.../webopac/nonidf.do?userid=${USERID}&password=${PASSWD}"

までは比較的容易だったのですが、最後の

   "&cmd=login"

に気が付くまで3日もかかりました。

ログインしてクッキーを取得して、そのクッキーをサーバーに送信するという手順については下記URLなどを参考にさせて頂きました。

http://qiita.com/kuboon/items/85169dcec746db552935

私が利用している地域図書館では、例えば

資料名:    首折り男のための協奏曲∥伊坂 幸太郎/著∥新潮社∥2014.1∥Fイサカ◇Fイサカ◇913.6

のように「∥」(スラッシュ-スラッシュではありません。シフトJISで8161の一文字の記号です)を区切り文字として、タイトル、著者名、出版社、発行年月などを表示してくれますので、awkを使って変数に読み込み、データベースに登録しました。

登録後のテーブルの内容です。

mysql> select seq,auther,title,出版社,発行年月 from library;
+-----+---------------------+---------------------------------------------------------------+-----------------+--------------+
| seq | auther              | title                                                         | 出版社      | 発行年月     |
+-----+---------------------+---------------------------------------------------------------+-----------------+--------------+
|   1 | 西條奈加/著         | いつもが消えた日(お蔦さんの神楽坂日記[2])   | 東京創元社      | 2013-11-01   |
|   2 | 上田早夕里/著       | 妖怪探偵・百目3百鬼の楽師(光文社文庫う18-5)   | 光文社       | 2015-11-01   |
|   3 | 堀川アサコ/著       | 小さいおじさん(新潮文庫nexほ-21-22)   | 新潮社          | 2016-04-01   |
|   4 | 山本甲士/著         | つめ                                                    | 小学館          | 2016-10-01   |
|   5 | 伊坂幸太郎/著       | 首折り男のための協奏曲                      | 新潮社          | 2014-01-01   |
|   6 | 坂木司/著           | 短劇(光文社文庫さ24-2)                          | 光文社          | 2011-02-01   |
+-----+---------------------+---------------------------------------------------------------+-----------------+--------------+
6 rows in set (0.24 sec)

 


 

#!/bin/bash
WORKDIR=~/library
USERID=XXXXXXXXX # 図書館カードのID番号
PASSWD=XXXXXXXX  # 事前に登録したパスワード

# データベースにテーブルが存在しない場合定義します
mysql  life_log << _SQL_
 create table if not exists library(
  seq int primary key auto_increment,
  title tinytext,
  auther tinytext,
  出版社 tinytext,
  発行年月 date,
  その他 tinytext,
  org tinytext,
  insertDate datetime,
  comment varchar(20)
);
_SQL_

# SSL認証によりログインしてクッキーを取得
curl "https://web.oml.city.osaka.lg.jp/webopac/nonidf.do?\
userid=${ USERID }&password=${ PASSWD }&cmd=login" \
-c ${ WORKDIR }/cookie.txt > /dev/null 2>&1

# クッキーを使用して利用状況一覧を取得
curl -b ${ WORKDIR }/cookie.txt \
"https://web.oml.city.osaka.lg.jp/webopac/nonasklst.do" \
> ${ WORKDIR }/temp.html 2>/dev/null

num_book=`\
 w3m -dump ${ WORKDIR }/temp.html |\
 grep "貸出中の資料" |\
 sed -e "s/貸出中の資料//g" |\
 sed -e "s/件//g" |\
 sed -e "s/ //g"`
echo ${ num_book }冊借りてます

# 貸出一覧を取得します。
# 一度に3冊までしか表示してくれませんので
# ${ num_book }回取り込みます
for ( ( book=1; book<=${ num_book }; book++ ) )
do
 curl -b ${ WORKDIR }/cookie.txt \
 "https://web.oml.city.osaka.lg.jp/\
webopac/nonlenlst.do?startpos=${ book }" \
 > ${ WORKDIR }/temp.html 2>/dev/null
 original=`\
  w3m -dump ${ WORKDIR }/temp.html -cols 255 |\
  grep "資料名" |\
  sed -n '1p' |\
  sed -e "s/資料名://g"|\
  sed -e "s/ //g"`
 nchar=`echo  "$original" | wc -c`
 echo ${nchar}文字です
 if [ $nchar -ge 255 ]
 then
  original="tinytext型は255文字までです"
 fi

# 区切り文字「∥」により書名、著者名、出版社、発行年月などを
# 取得します
 title=`echo "$original" | awk -F∥ '{ print $1 }'`
 auther=`echo "$original" | awk -F∥ '{ print $2 }'`
 publish=`echo "$original" | awk -F∥ '{ print $3 }'`
 pubDate=`echo "$original" | awk -F∥ '{ print $4 }'`
 other=`echo "$original" | awk -F∥ '{ print $5 }'`
 pubDate=`echo $pubDate | sed -e "s/$/\.1/g"`

  echo -----------------
  echo タイトル=$title
  echo 著者=$auther
  echo 出版社=$publish
  echo 発行年月=$pubDate
  echo その他="$other"

# データベースに登録します
  mysql - life_log << _SQL_
   insert into library(title,auther,出版社,発行年月,その他,org,insertDate)
   value("$title","$auther","$publish","$pubDate","$other","$original",
   now() );
_SQL_
done
rm ${ WORKDIR }/temp.html