12/1にiPad mini買いに行ったら全モデル完売したので入荷するまで予約で待てと言われた。
しょうがないので予約したら商品いつ手に入るかわからないし全額払わされるのにポイントが貯まらないし、入荷したかどうかは自分でWebページを見ろという散々な状況です。
気になるけど酷いUI使ってわざわざ見るのもかったるいのでMechanizeにやってもらうことにしました。
herokuにデプロイしてschedulerで毎時0分に実行しています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
source "https://rubygems.org" | |
gem "mechanize" | |
gem "get-twitter-oauth-token" | |
gem "twitter" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 コメント:
コメントを投稿