Help us understand the problem. What is going on with this article?

APIで複数通貨のレートを効率よく完全自動でデータベースに登録する方法! メンテナンスも簡単!

More than 1 year has passed since last update.

概要

以前の記事seed.rbの使い方 railsでAPIから取得したjsonデータをDBに自動登録では、currencylayerのAPIを利用して一つの通貨を基に複数の通貨のレートを取得し登録したが、今回はそれを複数の通貨を基にしたレートを取得し、さらに通貨が増えても簡単にメンテナンスできるように改良した。

コード

前回の記事で書いたコードは通貨を変更するときは、URLの編集が必要であった。
また、USDJPYとJPYUSDといった変換先が逆転するデータも登録する場合、新たにURLを書かなくてはいけなかった。
今回のコードでは、eachを2回組み込むことで、完全自動で変換先が逆転したデータまで登録できる。
また、通貨を追加する際にも、sourcesの配列に追加するだけで、メンテナンスも簡単である。

sample.rb
ENV["SSL_CERT_FILE"] = "app/controllers/cacert.pem"
      require 'open-uri'
      sources = ["USD","JPY","EUR","CNY","KRW","THB"]
      currencies = sources.join(',')#配列を文字列に変換
      sources.each do |source| #変換元(source)を順番に繰り返す。
          res = open('https://apilayer.net/api/live?access_key=アクセスコード&currencies=' + currencies + '&source=' + source + '&format=1')
          code, message = res.status # res.status => ["200", "OK"]
          if code == '200'
            result = ActiveSupport::JSON.decode res.read
            @result = result['quotes'] #返ってきたjsonデータをrubyの配列に変換
            @result.each do |key, value| #jsonの通貨ごとに登録を繰り返す。
               rate = Exchange.find_or_create_by(currency: key)
               rate.update(currency: key, rate: value)
            end
          else
            puts "Error!! #{code} #{message}"
          end
        end
      end

感想

かなりきれいに実装できたので良かった(うれしかったので記事にしました。笑)
eachの使い方などがパッと思いつくようになり、エンジニアの思考回路に近づいた気がする。
今度は、これをheroku上で毎朝定期的に実行するような実装をする予定。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away