Python3でSonyストアの入荷をGメールで通知する

##動機
最近SONYのPS4用ヘッドセットが大変人気らしく、SONYストアから姿を消しています・・・

これ
https://pur.store.sony.jp/ps4/products/ps4_other/CUHJ-15007_purchase/

Amazonやその他店舗では取り扱いがあるものの、SONYストアの価格よりも6,000円も高かったりしてどうにかしてSONYストアで購入したい・・・
そうしてここ4日ほどちょくちょくサイトを見ていたのですが面倒になってきたので思いつきでPythonでメール通知をするプログラムを作ることにしました。
Pythonはほとんど書いたことが無いので何か気になったところは自分で直していただけると助かります。

##私の環境
MacbookAir
MacOS Sierra 10.12.6
Python3.6.0

##参考サイト
[PythonでWebスクレイピングする時の知見をまとめておく](https://vaaaaaanquish.hatenablog.com/entry/2017/06/25/202924#requests)
[Pythonでメール送信~Gmail編~](https://qiita.com/bgg0u/items/630a87ce1a44778bbeb1)
[Python3で一定間隔で処理を行う](https://qiita.com/miminashi/items/50a4f0906ab8f18b105d)
[【Python】requestsにおけるInsecureRequestWarningを非表示にする](http://73spica.tech/blog/requests-insecurerequestwarning-disable/)
[Pythonの簡単なコードでメールを自動送信してみる](http://www.statsbeginner.net/entry/2018/02/12/202232)
[UserAgentからOS/ブラウザなどの調べかたのまとめ](https://qiita.com/nightyknite/items/b2590a69f2e0135756dc)
[【Python入門】文字列の比較方法まとめ](https://www.sejuku.net/blog/23804#in)

##仕様
5分(300秒)に1度Sonyストアのソースの中に「入荷待ち」があるかをチェックして
もし見つからなかった場合は入荷したと判断し、指定したメールアドレスにメールを送信し自身のプロセスを終了する。
メールアドレスは複数個指定可能で一斉送信できる

##実装コード
``` SonyHeadSetChecker.py
import requests
import smtplib
from email.mime.text import MIMEText
from email.utils import formatdate
import time

# 警告を消す
import urllib3
from urllib3.exceptions import InsecureRequestWarning
urllib3.disable_warnings(InsecureRequestWarning)
# 警告を消す

PAGEURL = 'https://pur.store.sony.jp/ps4/products/ps4_other/CUHJ-15007_purchase/'
FROM_ADDRESS = 'YourGMail@gmail.com'
FROM_ADDRESS_NAME = 'YourName(任意)'
MY_PASSWORD = 'YourGoogleAccountPassword'
TO_ADDRESS = 'MailAddress1@gmail.com,MailAddress2@gmail.com'
TO_ADDRESS_LIST = ['MailAddress1@gmail.com','MailAddress2@gmail.com']
BCC_ADDRESS = ''
SUBJECT = 'Sonyヘッドホンの入荷情報'
BODY = '入荷した可能性がありますのでチェックしてください\n\n' + PAGEURL


def create_message( from_addr, from_addr_name, to_addr, bcc_addrs, subject, body):
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = from_addr_name + "<" + from_addr + ">"
    msg['To'] = ",".join( to_addr )
    msg['Bcc'] = bcc_addrs
    msg['Date'] = formatdate()
    return msg


def send(from_addr, to_addrs, bcc_addrs, msg):
    smtpobj = smtplib.SMTP('smtp.gmail.com', 587)
    smtpobj.ehlo()
    smtpobj.starttls()
    smtpobj.ehlo()
    smtpobj.login(FROM_ADDRESS, MY_PASSWORD)
    smtpobj.sendmail(from_addr, to_addrs, msg.as_string())
    smtpobj.close()


def CheckBackOrder():
    URL = PAGEURL
    headers = {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)"}
    resp = requests.get(URL, timeout=1, headers=headers,verify=False)
    # textでunicode, contentでstr
    # print(resp.text)

    return "入荷待ち" not in resp.text

if __name__ == '__main__':

    to_addr = TO_ADDRESS_LIST
    bcc_addr = BCC_ADDRESS
    subject = SUBJECT
    body = BODY

    msg = create_message( FROM_ADDRESS, FROM_ADDRESS_NAME, to_addr, bcc_addr, subject, body)

    while True:
        # print("チェックします",time.time())
        if CheckBackOrder():
            send(FROM_ADDRESS, to_addr, bcc_addr, msg)
            exit()

        time.sleep(300)
```

##簡単な説明
BCCも利用できますがGメールの仕様が気に食わなかったので空欄にしています。
また、送信先のメールアドレスを複数個設定するには'test@gmail.com,test@me.com,test@docomo.ne.jp'のように『,』で区切ってください。
最後のtime.sleep(300)が300秒 = 5分となっているので任意に変更してください。
『入荷待ち』という単語が含まれているかどうかしかチェックしていませんので確実に入荷状態になっているかは判定していません。

##おわりに
書き終わった後にとんでもないことに気がつきました。
Sonyストアには入荷したらメールが来るお気に入り機能が去年導入されたらしく存在していました。
見なかったことにします。
お疲れ様でした（白目）

何かあれば[Twitter@ryosuke_tamura](https://twitter.com/ryosuke_tamura)までお願いします。