これまで図書館で借りた本など、読んだ本の情報は手作業で書き留めていました。
でも図書館のホームページには例えば貸出延長したりできるようなサービスがあって、今自分が借りている図書の一覧を表示してくれるんですよね。これを利用しない手は無いと思い、貸出図書一覧を自動的に取得してデータベースに登録するシェルスクリプトを作成してみました。
とにかくログインするのが苦労しました。
"https://.../webopac/nonidf.do?userid=${USERID}&password=${PASSWD}"
までは比較的容易だったのですが、最後の
"&cmd=login"
に気が付くまで3日もかかりました。
ログインしてクッキーを取得して、そのクッキーをサーバーに送信するという手順については下記URLなどを参考にさせて頂きました。
私が利用している地域図書館では、例えば
資料名: 首折り男のための協奏曲∥伊坂 幸太郎/著∥新潮社∥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