参考に

http://d.hatena.ne.jp/isamu136/20070821様を参考に簡略化して作ってみた。ほとんどパクリですけど。

require "open-uri"
require "rexml/document"

class Active
  def initialize(doc)
    if doc.is_a?(REXML::Element)
      doc = REXML::Document.new(doc.to_s).root
    else
      doc = REXML::Document.new(open(doc)).root
    end
    hash = Hash.new {|h, k| h[k] = Array.new}
    
    doc.elements.each do |element|
      e = element.name.downcase
      if element.elements.empty?
        hash[e] = element.get_text.to_s
      else
        hash[e] << Active.new(element)
      end
    end
    
    hash.each_pair do |k, v|
      instance_variable_set("@#{k}", v)
      instance_eval "
        def #{k}
          return @#{k}
        end
      "
    end
  end
end

url = "http://api.hotpepper.jp/GourmetSearch/V110/?key=guest&Latitude=35.660818&Longitude=139.775426&Range=3"

Active.new(url).shop.each do |s|
  puts s.shopname
  puts s.shopurl
end
まんぷく苑
http://www.hotpepper.jp/A_20100/strJ000031050.html?vos=nhppalsa000016
鮨 れいめい
http://www.hotpepper.jp/A_20100/strJ000045341.html?vos=nhppalsa000016
地豚串焼と本格焼酎 タマヤ
http://www.hotpepper.jp/A_20100/strJ000031884.html?vos=nhppalsa000016
いやし家 晴海トリトン店
http://www.hotpepper.jp/A_20100/strJ000034587.html?vos=nhppalsa000016
信州 そば野
http://www.hotpepper.jp/A_20100/strJ000045342.html?vos=nhppalsa000016
もんじゃ焼き 錦
http://www.hotpepper.jp/A_20100/strJ000029980.html?vos=nhppalsa000016
築地青空三代目
http://www.hotpepper.jp/A_20100/strJ000245175.html?vos=nhppalsa000016
築地青空三代目 hafu
http://www.hotpepper.jp/A_20100/strJ000652004.html?vos=nhppalsa000016
もんじゃ おしお NST店
http://www.hotpepper.jp/A_20100/strJ000033127.html?vos=nhppalsa000016
もんじゃ屋 満天
http://www.hotpepper.jp/A_20100/strJ000034018.html?vos=nhppalsa000016

こういう考え方は本当に素晴しい。