Rubyで外国為替レートを取得する
Rubyで外国為替レートをリアルタイムで取得する必要があったので、メモしておく。 欲しい情報は1ドル単位の円相場。
実際に、GoogleとかYahooなどのファイナンス情報をスクレイピングして持ってくる 方法もあったが、APIがあったのでそれを使う。
Rate Exchange JSON/JSONP APIs by Hippasus Chu
今回は1ドルあたりの円相場を得る場合、次のようなパラメータを持たせてURLにアクセス するとJSON形式でデータを得られる。
http://rate-exchange.appspot.com/currency?from=usd&to=jpy
{"to": "jpy", "rate": 101.54000000000001, "from": "usd"}
ちなみに、1ユーロあたりだと、こうする。
http://rate-exchange.appspot.com/currency?from=eur&to=jpy
{"to": "jpy", "rate": 139.04900000000001, "from": "eur"}
APIの使い方が分かったところで、Rubyで欲しい情報を取り出す。
こんな感じで取得する。
require 'open-uri' require 'json' api = "http://rate-exchange.appspot.com/currency?from=usd&to=jpy" source = open(api).read() json = JSON.parser.new(source) hash = json.parse() rate = hash['rate'] puts rate
追記
このAPIを叩いているうちに、503 エラーが出た。
おそらく、利用回数の制限があるようだ。
Webサイトを表示させるたびに、通貨のAPIを叩く仕組みは良くない。。
APIを叩きレートを取得してテキストファイルに書き込むスクリプトを作り、
cronで一時間に一度レートを更新するように変更した。
#!/usr/bin/ruby require 'open-uri' require 'json' f = File::open("/Users/togattti/myapp/tmp/rate.txt","w") api = "http://rate-exchange.appspot.com/currency?from=usd&to=jpy" begin source = open(api).read() json = JSON.parser.new(source) hash = json.parse() rate = hash['rate'] f.puts rate rescue => ex err = File::open("/Users/togattti/myapp/tmp/rate_error.log","a") time = Time.now.strftime("[%Y-%m-%d %Hh%Mm%Ss]") err.puts "#{time} #{ex}" end
参考