2007-02-25
■ [Pragger] PRaggerだってピザを頼みたい
ですよね!
というわけで notify_demaecan.rb というプラグインを書いてみました。
Notify::Pizzaより高機能な点として、ピザのサイズが選べることが挙げられます(笑)。 例えばconfigに「size: L」のように書いておくと、Lサイズのピザの中からランダムで一つが選ばれます。 これでパーティーの際にも安心。
注意:
- テストしてません(ピザを頼む用事がなかったので)。 多分いけるとは思う。
- エラー処理が適当です。
- まだ寿司には対応してません。(対応は簡単なんだけど、失敗すると\8,000-とかかかるので危ないw)
- townという引数がありますが実装されてません。会員登録のときに住所も登録しておいてください
- 文字コードについて真面目に考えてません。出前館のWebページはSJISです
というわけで、どなたか実際に試していただけると有難いです^^;
require 'rubygems'
require 'mechanize'
class DemaeCan
def initialize(user, pass)
@user, @pass = user, pass
@agent = WWW::Mechanize.new
end
def order(type="ピザ", size="L", town="0")
#start
page = @agent.get("http://demae-can.com/index.php?action=dream_login_index")
#login
form = page.forms.first
form["id"] = @user
form["pass"] = @pass
page = form.submit
unless page.root.to_html.include? "http://demae-can.com/search/shop_list.html\?word=0"
raise ArgumentError, "login failed."
end
#select type
page = @agent.get("http://demae-can.com/search/shop_list.html\?word=#{town}")
link = page.links.find{|link| link.node.to_html.include?(type)}
page = link.click
#select shop
link = page.links.find{|link| link.href =~ /shopcode/}
page = link.click
#select size
forms = page.forms.find_all{|form|
(form.form_node/"td.mini").find{|td| td.inner_text =~ /#{size}サイズ/}
}
page = forms[rand(forms.size)].submit
#select number
page = page.forms.first.submit
#select time
page = page.forms.first.submit
#submit!!
form = page.forms.first
form["pass"] = @pass
page = form.submit
end
end
def notify_demaecan(config, data)
demae = DemaeCan.new(config["user"], config["password"])
demae.order(config["type"], config["size"])
end
=begin
- module: notify_demaecan
config:
user: AABCDEF
password: pAssw0rD
type: ピザ
size: L
=end
#将来的にはgem化して
gem install demaecan
とかできると格好いい…かも。
次の CodeFest のときにでも是非使ってください!
おお、そんな手が…あるのか!?
だって、いつもg新部さんが電話で注文してるし...