2014年10月7日火曜日

夜間バッチでAPIを利用して為替レートを取得する方法

概要

気がついたら、Googleの為替取得用のAPIが使えなくなっていたので、
その代替えとして、Git Hub - ExchangeRatesを使う事にしました。
このAPIを使うと
http://rate-exchange.appspot.com/currency?from=usd&to=jpyのurlで、下記なようなjsonが取得できます。
{
  to: "jpy",
  rate: 109.365,
  from: "usd"
}
urlのパラメータでfromとtoを変えることで、ユーロや元など他の通貨にも対応可能です。

使い方

今回やりたい事は、1日1回夜間のバッチで為替レートを取得するため、
rake で実行する、スクリプトを作成しました。
そのコードを下記します。
# -*- encoding : utf-8 -*-

namespace :batch do

  desc '為替のレートを取得する'
  task :rate => :environment do |task|
    begin
      Rate.transaction do

        # ドル
        usd_jpy_url = "http://rate-exchange.appspot.com/currency?from=usd&to=jpy"
        source = open(usd_jpy_url).read()
        json = JSON.parser.new(source)
        usd_hash = json.parse()
        puts "USD : #{usd_hash['rate']}"
        usd_rate = Rate.find_by_code('usd')
        usd_rate.rateval = usd_hash['rate']
        usd_rate.save!

        # ユーロ
        eur_jpy_url = "http://rate-exchange.appspot.com/currency?from=eur&to=jpy"
        source = open(eur_jpy_url).read()
        json = JSON.parser.new(source)
        eur_hash = json.parse()
        puts "EUR : #{eur_hash['rate']}"
        eur_rate = Rate.find_by_code('eur')
        eur_rate.rateval = eur_hash['rate']
        eur_rate.save!

        # 元
        cny_jpy_url = "http://rate-exchange.appspot.com/currency?from=cny&to=jpy"
        source = open(cny_jpy_url).read()
        json = JSON.parser.new(source)
        cny_hash = json.parse()
        puts "CNY : #{cny_hash['rate']}"
        cny_rate = Rate.find_by_code('cny')
        cny_rate.rateval = cny_hash['rate']
        cny_rate.save!

      end # Userd transaction end

      puts "success : #{Time.now}"
    rescue => e
      puts "error : #{Time.now} : #{e.message}"
    end

  end
end

putsでは下記のような値が出力されます。
"USD : 109.441"
"EUR : 137.241"
"CNY : 17.8184"
後は、これをcronに設定するば終了です。

0 件のコメント:

コメントを投稿

statistics

Arsip