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新部さんが電話で注文してるし...