=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 border=1 cellspacing=0>(.*?)<\/table>/m, 1)
	row = table.scan(/<tr[^>]*>.*?<\/tr>/m)[1]
	col = row.scan(/<td[^>]*>.*?<\/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
		'<a href=http://' + server + param + '&d=t>' \
		+ name + ': ' + rate + '(' + diff + ')' \
		+ '</a>'
	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
		'<img src="' + url + '">'
	else
		''
	end
end

