シャーメゾンに住みたい
住みたい。
シャーメゾンに住むには、もちろん不動産屋に行けばいいんだけど、物件自体はWebでも見られるのでちょいちょい見ている。
が、 www.shamaison.com にはいくつか問題があって、
- ログイン機能がずさん。パスワードが設定できないので、メールアドレスさえあれば検索条件を誰でも閲覧できる
- 物件情報が更新されてもリアルタイムにメールで通知してくれない。どういうタイミングでメールが飛ぶのか分からないが深夜にも飛ぶ
- 気になっちゃって何度も見に行っては、更新されてなくてため息をついてしまう
こうしているうちに、ハラハラしている時間が無駄だなと気づいて(今更感あるけど)、もう更新されたらすぐ通知してくれるような仕組みを自作した。
通知の仕組み
www.shamaison.com は検索条件を保存することができて、保存するとそれぞれに RID
というのが振られるような仕様のようだ。
このRIDは、検索条件を保存し、なおかつメール通知設定をすると、設定完了時に受信できるメール内に記述がある。
cf. https://www.shamaison.com/request/srch?RID=xxxxxxxxxx
このRIDはわかってしまえばログイン不要でどこからでも閲覧可能という、セキュリティとは何なのかを考えさせるような仕組みになっている。
この仕様を利用し、HTMLページをポーリングして、差分を検知できればよい。
実装
# !/bin/bash
declare -r URL="https://www.shamaison.com/request/srch?RID=xxxx"
declare -r LOG_PATH="/tmp/shamaison.log"
declare -r HIT_PATH_BEFORE="/tmp/shamaison_hitnum.before"
declare -r HIT_PATH="/tmp/shamaison_hitnum.now"
declare -r SRCADDR="(送信元メールアドレス)"
declare -r DSTADDR="(受信するメールアドレス)"
# 前回との差分を計算するための事前処理
rm -rv ${LOG_PATH} ${HIT_PATH_BEFORE}
touch ${HIT_PATH}
mv -v ${HIT_PATH} ${HIT_PATH_BEFORE}
# 今回分のクロールを実行
wget ${URL} -O ${LOG_PATH}
nkf -w ${LOG_PATH} | grep "hitNm01" > ${HIT_PATH}
# 差分があればメールを送信する
CHANGELOG="$(diff -u ${HIT_PATH_BEFORE} ${HIT_PATH})"
if [ $? -ne 0 ]; then
cat << EOD | /usr/bin/nkf --ic=UTF-8 --oc=ISO-2022-JP | /usr/sbin/sendmail -i -f ${SRCADDR} ${DSTADDR}
From: ${SRCADDR}
To: ${DSTADDR}
Subject: shamaison change alert
Content-Type: text/plain; charset=ISO-2022-JP
MIME-Version: 1.0
${URL}
${CHANGELOG}
EOD
fi
あとは crontab に登録すればよい。ポーリング間隔は良心的な数字にしておくとよい。
頻繁にアクセスしたところで嬉しいことはたぶんない。
*/10 * * * * bash /usr/local/bin/shamaison_checker.sh > /dev/null 2>&1