Top/Blog/2016-04-02

2016-04-02はてなブックマーク

[VR]某社のOrder Historyのステータスを取得して、Gmailで送るスクリプトを書いた Permalinkはてなブックマーク

某社のOrder Historyのステータスを取得して、Gmailで送るスクリプトを書きました。


Raspberry Pi上で動作させようとしたけれど、色々あって失敗。

ということでWindows上で動作するようにしてみました。


定期実行する場合は、あまり短い間隔で動作させるのは止めましょう。向こうのサーバに負荷がかかりますし、無意味です。

基本的に1日に1回程度。せめて数時間以上間隔を空け、かつXX:00でなくなるように分の部分もずらすとベターかと思います。


導入手順は次の通り。


  1. Pythonをインストールする。
  2. コマンドプロンプトで下記を実行する。
    cd C:\Python27\Scripts
    pip install selenium
  3. ChromeDriverのサイトからchromedriver_win32.zipをダウンロードして適当な場所に解凍する。
  4. Googleの二段階認証を有効にしている場合はアプリパスワードを発行する。
  5. filesend_oculus_order_status.pyをダウンロードする。
  6. send_oculus_order_status.pyを開き、下記を設定する。
    設定説明
    CHROMEDRIVER_PATH上記でダウンロードしたchromedriver.exeのファイルパスを指定する
    LOGIN_ADDRESSOculusのサイトのログインアカウントであるメールアドレスを指定する
    LOGIN_PASSWORDOculusのサイトのログインパスワードを指定する
    MAIL_FROMメールの差出人を指定する(認証にも使います)
    MAIL_TOメールの宛先を指定する
    MAIL_PASSWORDメールの認証パスワードを指定する(二段階認証を有効にしている場合は上記で発行したアプリパスワードを指定)
    MAIL_SUBJECTメールの件名を指定する


スクリプトの中身はこんな感じ。

filesend_oculus_order_status.py
# -*- coding: utf-8 -*-
 
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import smtplib
from email.mime.text import MIMEText
 
CHROMEDRIVER_PATH = r"C:\Chromedriver\chromedriver.exe"
LOGIN_ADDRESS = "example@gmail.com"
LOGIN_PASSWORD = "exAm!E"
MAIL_FROM = LOGIN_ADDRESS
MAIL_TO = LOGIN_ADDRESS
MAIL_PASSWORD = "exxamplee"
MAIL_SUBJECT = "Oculus Order Status"
 
def get_oculus_order_status(path, addr, passwd):
    driver = webdriver.Chrome(path)
 
    try:
        driver.get("https://shop.oculus.com/en-us/history-login/")
 
        el_email = WebDriverWait(driver, 100).until(
            EC.presence_of_element_located((By.NAME, "email"))
        )
        el_password = WebDriverWait(driver, 100).until(
            EC.presence_of_element_located((By.NAME, "password"))
        )
        el_login = WebDriverWait(driver, 100).until(
            EC.presence_of_element_located((By.NAME, "login"))
        )
        el_email.send_keys(addr)
        el_password.send_keys(passwd)
        el_login.click()
 
        el_section = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "op-accordion"))
        )
        el_section.click()
 
        el_status = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "op-order-history__order-status"))
        )
        el_numbers = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "op-order-history__order-numbers"))
        )
 
        return el_status.text + "\n" + el_numbers.text
    finally:
        driver.close()
        driver.quit()
 
def send_mail_by_gmail(ml_from, ml_to, passwd, sub, body):
    msg = MIMEText(body)
    msg['Subject'] = sub
    msg['From'] = ml_from
    msg['To'] = ml_to
 
    smtp = smtplib.SMTP("smtp.gmail.com", 587)
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo()
    smtp.login(ml_from, passwd)
    smtp.sendmail(ml_from, ml_to, msg.as_string())
    smtp.close()
 
if __name__ == '__main__':
    status = get_oculus_order_status(CHROMEDRIVER_PATH, LOGIN_ADDRESS, LOGIN_PASSWORD)
    send_mail_by_gmail(MAIL_FROM, MAIL_TO, MAIL_PASSWORD, MAIL_SUBJECT, status)
差分 一覧