LoginSignup
3
0

More than 5 years have passed since last update.

www.shamaison.com の検索結果に変化があったら通知する

Posted at

シャーメゾンに住みたい

住みたい。
シャーメゾンに住むには、もちろん不動産屋に行けばいいんだけど、物件自体は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
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0