=begin == yf.rb ヤフーファイナンスの株価やチャートを表示するプラグインです。 === 使い方 yf_rate は株価、yf_chart はチャートを表示します。 プラグインを有効にして {{yf_rate('99847.O')}} {{yf_chart('99847.O')}} などのように書いてください。 引数は Yahoo ポートフェリオに登録するのと同じものです。 {{yf_chart('99847.O', 0)}} とすることで 1 年のチャート、 {{yf_chart('99847.O', 1)}} とすることで 1 日のチャートを表示します。 デフォルト値は 0 (1 年チャート) です。 === ライセンス ruby のライセンスでどうぞ。 =end # 株価を取得 def yf_rate(id) require 'net/http' server = "quote.yahoo.co.jp" param = "/q?s=#{id}" body = String.new Net::HTTP.start(server) {|http| response = http.get(param) body = response.body } return '' if body =~ /一致する銘柄はありません/ table = body.slice(/(.*?)<\/table>/m, 1) row = table.scan(/]*>.*?<\/tr>/m)[1] col = row.scan(/]*>.*?<\/td>/m) # タグを削除してデータを抽出 code = col[0].gsub(/<[^>]*>/,'') # 証券コード market = col[1].gsub(/<[^>]*>/,'') # 市場 name = col[2].gsub(/<[^>]*>/,'') # 会社名 time = col[3].gsub(/<[^>]*>/,'') # 時刻 rate = col[4].gsub(/<[^>]*>/,'') # 取引値 diff = col[5].gsub(/<[^>]*>/,'') # 前日比 if name && rate && diff '' \ + name + ': ' + rate + '(' + diff + ')' \ + '' else '' end end # チャートを取得 def yf_chart(id, today=0) require 'net/http' today = 0 if today != 1 # 証券コードから直接は出せないので # アクセスして画像の URL を取得 server = "quote.yahoo.co.jp" param = "/q?s=#{id}&d=#{today}b" body = String.new Net::HTTP.start(server) {|http| response = http.get(param) body = response.body } return '' if body =~ /一致する銘柄はありません/ url = body.slice(%r#src="(http://chart.yahoo.co.jp/.*?\.gif)"#m, 1) if url '' else '' end end