2012年12月13日木曜日

ヨドバシで予約したiPad miniの状況をMechanizeでチェックする

12/1にiPad mini買いに行ったら全モデル完売したので入荷するまで予約で待てと言われた。
しょうがないので予約したら商品いつ手に入るかわからないし全額払わされるのにポイントが貯まらないし、入荷したかどうかは自分でWebページを見ろという散々な状況です。

気になるけど酷いUI使ってわざわざ見るのもかったるいのでMechanizeにやってもらうことにしました。
herokuにデプロイしてschedulerで毎時0分に実行しています。

source "https://rubygems.org"
gem "mechanize"
gem "get-twitter-oauth-token"
gem "twitter"
view raw Gemfile hosted with ❤ by GitHub
# coding: utf-8
require 'bundler'
Bundler.require
require 'nkf'
FORM_URL = 'https://order.yodobashi.com/ec/order/private_info/index.do'
ORDER_NO = 'xxxxxxxxx'
TEL = 'xxxxxxxxxxx'
CONSUMER_KEY = 'xxxxxxxxxxxxxxxxxxxxxx'
CONSUMER_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
ACCESS_TOKEN = 'xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
ACCESS_TOKEN_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
FORM_NAME = 'b0400X0PrivateInfoDto'
ORDER_NO_NAME = 'orderNo'
AUTH_TYPE_NAME = 'authType'
AUTH_TYPE_OPTION = '電話番号(電話番号は"-"をいれずに入力してください)'
AUTH_KEY_NAME = 'key'
CHECK_TARGET = /メーカへ手配中です/
def submit_form
agent = Mechanize.new
agent.get(FORM_URL)
agent.page.form_with(name: FORM_NAME) do |form|
form.field_with(name: ORDER_NO_NAME).value = ORDER_NO
form.field_with(name: AUTH_TYPE_NAME) do |auth_type|
auth_type.option_with(text: AUTH_TYPE_OPTION).select
end
form.field_with(name: AUTH_KEY_NAME).value = TEL
form.click_button
end
NKF.nkf('-w', agent.page.body)
end
def client
@client ||= Twitter::Client.new(
consumer_key: CONSUMER_KEY,
consumer_secret: CONSUMER_SECRET,
oauth_token: ACCESS_TOKEN,
oauth_token_secret: ACCESS_TOKEN_SECRET,
)
end
def notify(text)
client.direct_message_create(client.verify_credentials.screen_name, "#{ text } #{ Time.now }")
end
if submit_form.match CHECK_TARGET
notify "まだだね"
else
notify "きたかも"
end

0 コメント:

コメントを投稿