トップ «前の日記(2007-02-24) 最新 次の日記(2007-03-02)» 編集

Route 477



2007-02-25

[misc] 3/1まで出かけてます

T/O

[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

とかできると格好いい…かも。

本日のツッコミ(全3件) [ツッコミを入れる]
中本 (2007-02-27 01:25)

次の CodeFest のときにでも是非使ってください!

yhara (2007-03-02 20:45)

おお、そんな手が…あるのか!?

中本 (2007-03-03 01:05)

だって、いつもg新部さんが電話で注文してるし...

本日のリンク元