Yahooから株価情報を取得 #2
書き直した。正規表現の%記法である%rを使ってみた。
require 'net/http' require 'kconv' class YahooInfo @@regexes = { :name=> '<td nowrap> <b>(.*?)</b>', :exchange=> '</b> <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