$yuzu->log();

技術ネタなど。

iPhone7等の新製品を誰よりも早く予約する為に、予約サイトがオープンしたらSlackに通知する方法

Shell Script Advent Calendar 2015 8日目を担当させていただきます、@yudsuzukです。

今回は実用的なシェルスクリプトについて書きます。

GoogleのNexusやAppleiPhone等の新製品の発表は、日本時間で深夜なため、起きているのが辛いし、いつ購入サイトがオープンしたか分かり難いですよね。
気がついたら、新製品の予約サイトがオープンしてて、お目当ての製品が既に予約でいっぱい。お届け予定日数は1ヶ月後なんて事もしばしば。

そんなあなたのために、新製品の予約サイトがオープンしたらSlackに通知させるシェルスクリプトをつくりました。

今回は、実際にそのシェルスクリプトのお陰で予約ができたNexus5X、Nexus6Pの事例と、近い将来発売されるであろうiPhone7の予約サイトオープン通知スクリプトを紹介します。

Nexus5XとNexus6Pの予約サイトオープン事例

今回はGoogleの新製品、Nexus5XとNexus6Pの予約サイトがオープンした時の事例を紹介します。
予めSlackのIncoming WebHooksでWebhook URLを取得してください。

doneFile=done.txt
if [ ! -e $doneFile ]; then
    exit 0
fi

# 通知するSlackのチェンネル
channel="#test"
# 通知する時のユーザ名
username="incoming-webhook"
# 通知するユーザのアイコン
iconemoji=":shell:"
# WebHookURL
webhookUrl="https://hooks.slack.com/services/XXXXXXXX"
# 通知文言
text="nexus_5xとnexus_6pのサイトがオープンしたよ!"
# サイトURL prefix
prefixUrl="https://store.google.com/product/"
# 製品名
products=("nexus_5x" "nexus_6p")


for product in ${products[@]}
do
    status=`/usr/bin/curl -LI $prefixUrl$product -o /dev/null -w '%{http_code}' -s`
    if [ $status -eq '200' ]; then
        /usr/bin/curl -X POST --data-urlencode "payload={\"channel\": \"${channel}\", \"username\": \"${username}\", \"text\": \"${text}\", \"icon_emoji\": \"${iconemoji}\"}" ${webhookUrl}
        touch $doneFile
        exit 0
    fi
done

cronに仕込めば完成。
5分おきぐらいに実行すれば怒られないでしょう。
URLが下記のものであるだろうという予測を元に作ってあります。

https://store.google.com/product/nexus_5x
https://store.google.com/product/nexus_6p

ドキドキでしたが、このスクリプトを仕込んだ結果、ちゃんと通知されていました。

f:id:yuzurus:20150930151034p:plain

予約サイトがオープンした時間は日本時間AM2:20でした! この通知を見て無事予約できました。

iPhone7の予約サイトがオープンしたことをSlackに通知させたい

近い将来発売されるであろうiPhone7。
iPhone7の予約サイトがオープンしたことをSlackに通知させる場合は、先ほどのスクリプトを下記のように変更してください。

# サイトURL prefix
prefixUrl="http://www.apple.com/jp/shop/buy-iphone/"
# 製品名
products=("iphone7")

このスクリプトを仕込んだあなたは、きっと誰よりも早くiPhone7を手に入れる事ができるでしょう!

※URLを予測しているので、失敗したらごめんなさい。
※発表されるであろう日に仕込んでください。

ということでShell Script Advent Calendar 2015 8日目でした。
次は@ryoana14さんです。よろしくお願いします!