[シェル芸]Amazonの商品が安くなったら起こして をワンライナーでやってみた


いつも私は地元北海道の水 [2CS] 黒松内 水彩の森(2L×6本)×2箱 をAmazonからまとめ買いしているのですが、今年の2月下旬時点で980円だったのが震災の影響で品薄なのか、1980円というとんでもないお値段に。。。

↑ 2016/04/23 17:00時点で売り切れ。。。Amazon以外の出品者は軒並み倍近い価格で売り出してる。。。

いずれ需要が落ち着けば価格も下がるのかとは思うのですが、ブラウザを開いて毎日Amazonの価格チェックをするのもかったるいものです。というわけで、いろんな出品者の価格をチェックして、自分で決めた価格より安くなった時だけメール通知するようにしました。

今回のワンライナーはこちら。

[ (っ´∀`)っ@ぽぽぽ ~]$  PRICELIMIT=1500 ; URI="http://www.amazon.co.jp/gp/offer-listing/B0019JNU5I/ref=dp_olp_new?ie=UTF8&condition=new" ; MTA=mail.example.com ; MAILFROM=nullpopopo@example.com ; MAILTO=nullpopopo@example.com ; TITLE="$(curl -s -A 'Mozilla/4.0' ${URI} | egrep -i "<\/h1>" | awk 'BEGIN {FS="</div>"} {print $NF}' | sed -e "s/^[[:space:]]*//;s/[[:space:]]*<\/h1>//")" ; NOWPRICE=$(curl -s -A 'Mozilla/4.0' ${URI} | egrep '(span class="a-size-large a-color-price olpOfferPrice a-text-bold")' | awk '{print $7}' | sed -e "s/,//g" | sort -n | head -n 1) ; [ ${NOWPRICE} -lt ${PRICELIMIT} ] && echo -e "$(date) ${TITLE} \\${NOWPRICE}\n${URI}" | mail -S "smtp=smtp://${MTA}:25" -r ${MAILFROM} -s "$(date) ${TITLE} Pricecheck" ${MAILTO}

最初の変数 PRICELIMIT で、欲しい商品が1500円未満になったら通知するようにしています。URI変数には、は以下の画面のような、複数の販売者の価格を一覧表示するページのURIを代入しています。

amazon_pricechecker_web

あと、mailコマンドのオプションはfedora 23とCentOS6、CentOS7で確認していますが、OSやディストリビューションによって使い分けてくださいね。それではメールが届いたか確認してみましょう。

amazon_pricechecker_mail

こんな風に、メール本文にAmazonのリンクがあるので、メールをチェックして即価格確認ができますね。\べんり!/

もし、自分の欲しい価格がどうとか関係なしに、狙った商品の最安値を淡々とログに書きたい、という要件でしたら以下のようにしてもよいでしょう。

[ (っ´∀`)っ@ぽぽぽ ~]$ URI="http://www.amazon.co.jp/gp/offer-listing/B0019JNU5I/ref=dp_olp_new?ie=UTF8&condition=new" ; LOGFILE=${HOME}/Dropbox/APPS/LOGS/AmazonPriceCheck.txt ; TITLE="$(curl -s -A 'Mozilla/4.0' ${URI} | egrep -i "<\/h1>" | awk 'BEGIN {FS="</div>"} {print $NF}' | sed -e "s/^[[:space:]]*//;s/[[:space:]]*<\/h1>//")" ; echo -e "$(date)\t${TITLE}\tLOW_Price: $(curl -s -A 'Mozilla/4.0' ${URI} | egrep '(span class="a-size-large a-color-price olpOfferPrice a-text-bold")' | awk '{print $7}' | sed -e "s/,//g" | sort -n | head -n 1)" | tee -a ${LOGFILE}

ログに価格が吐かれているかを確認します。

[ (っ´∀`)っ@ぽぽぽ ~]$ cat ${LOGFILE}
2016年  4月 23日 土曜日 16:35:54 JST	[2CS] 黒松内 水彩の森(2L×6本)×2箱	LOW_Price: 1076

他の商品でも確認してみましょう。

[ (っ´∀`)っ@ぽぽぽ ~]$ URI="http://www.amazon.co.jp/gp/offer-listing/B01D9E6HTG/ref=dp_olp_new?ie=UTF8&condition=new" ; LOGFILE=${HOME}/Dropbox/APPS/LOGS/AmazonPriceCheck.txt ; TITLE="$(curl -s -A 'Mozilla/4.0' ${URI} | egrep -i "<\/h1>" | awk 'BEGIN {FS="</div>"} {print $NF}' | sed -e "s/^[[:space:]]*//;s/[[:space:]]*<\/h1>//")" ; echo -e "$(date)\t${TITLE}\tLOW_Price: $(curl -s -A 'Mozilla/4.0' ${URI} | egrep '(span class="a-size-large a-color-price olpOfferPrice a-text-bold")' | awk '{print $7}' | sed -e "s/,//g" | sort -n | head -n 1)" | tee -a ${LOGFILE}
[ (っ´∀`)っ@ぽぽぽ ~]$ cat ${LOGFILE}
2016年  4月 23日 土曜日 16:35:54 JST	[2CS] 黒松内 水彩の森(2L×6本)×2箱	LOW_Price: 1076
2016年  4月 23日 土曜日 16:43:04 JST	Apple 2016 iPhone SE SIMフリー 4インチ 【64GB シルバー】- 米国版SIMフリー [並行輸入品]	LOW_Price: 81499

いい感じにAmazonで欲しい商品の最安値をロギングすることができました。あとはこのワンライナーをcronで回しておけば、中長期的な価格の推移を見ることができるでしょう。

もしおうちにcurlが動く環境がなければ、さくらのVPSを借りるといいと思うよ。