2008年2月4日月曜日

SG アラブファンド

今日、ソシエテゼネラルのSG アラブファンドを購入したので、
基準価格を取得するスクリプトを作成しました。
これをcrontab(windows ならタスク)で自動起動させ結果を
gmailで飛ばすとかなり便利です。rubyではgmailerという
ライブラリがすでにあります。
私はこれで毎朝、携帯に全投資信託の基準価格を送信して
一喜一憂しております。

実行時はソースファイルをsjisで保存。
ruby sg.rb

ソース sg.rb
require 'uri'
require 'net/http'

$KCODE="s"


class HttpError < StandardError; end

class Sg

SG_URL = 'http://www.sgam.co.jp/html/kagaku01.htm'
attr_reader :day, :value, :diff

def initialize
@data = self.get(SG_URL)
self.parse
end


def get( url, query=nil )



target_uri = URI.parse( url )

resp_data=nil

path = target_uri.path

if query != nil

path = path + '?' + query

end



Net::HTTP.version_1_2

Net::HTTP.start(target_uri.host, 80) {|http|
req = Net::HTTP::Get.new(path)
response = http.request(req)

if response.code != "200"

raise HttpError, "Http Conection Error."

end
resp_data = response.body
}

if resp_data == nil

raise HttpError, "Http Receive Error."

end

resp_data

end

def parse

regex = %r{

<!--Date-->
¥s+([\d\/]+)
¥s+現在</font></p>
¥s+</td>
¥s+</tr>
¥s+</table>

}xs
# 日付を取得
@day = $1 if @data =‾ regex

regex = %r{
<tr>
¥s+<td>¥s<a¥shref=141005_arab_m.html¥starget=¥'_top¥'>SG¥sアラブ株式ファンド</a>¥s</td>
¥s+<td¥salign=center¥snowrap>¥s([¥d¥,]+)¥s</td>
¥s+<td¥salign=center¥snowrap>¥s([¥d¥-¥+]+)¥s</td>
¥s+<td¥salign=center¥snowrap>¥s[¥d¥,]+¥s</td>
¥s+</tr>
}xs

# 日付を取得
if @data =~ regex
@value = $1; @diff = $2
else
raise "ERROR 解析失敗"
end

end

end

if __FILE__ == $0
sg = Sg.new
puts "SG ARAB #{sg.day} #{sg.value} #{sg.diff}"

end


実行結果
$ ruby sg.rb
SG ARAB 2008/2/4 10,029 25

0 件のコメント:

干し芋のリスト