Yahooから株価情報を取得 #2

書き直した。正規表現の%記法である%rを使ってみた。

require 'net/http'
require 'kconv'

class YahooInfo
  @@regexes = {
     :name=>        '<td nowrap>&nbsp;<b>(.*?)</b>',
     :exchange=>    '</b>&nbsp;<b>【</b>(.*?):<b>',
     :price=>       '取引値<br>.*?<b>(.*?)</b>',
     :volume=>      '<td nowrap>出来高<br>(.*?)</td>',
     :capital=>     '<td nowrap>時価総額<br>(.*?)</td>',
     :issue_number=>'<td nowrap>発行済株式数<br>(.*?)</td>'
  }

  @@regexes.each {|k,v|
    instance_eval {
      attr_reader k
    }
  }

  def get(code)
    Net::HTTP.version_1_2
    Net::HTTP.start('quote.yahoo.co.jp', 80) {|http|
      response = http.get("/q?s=#{code}.t&d=t")
      response_body = response.body.kconv(Kconv::SJIS, Kconv::EUC)
      
      @@regexes.each {|k,v|
        rg = %r"#{v}"
        instance_eval %Q"
          @#{k.to_s} = response_body.scan(rg)
        "
      }
    }
  end
end