Railsで作った天気アプリのAPIを変更した話
はじめに
今回はRailsで作った天気アプリで使っていたlivedoor さんの天気APIがサービス終了していたので、APIの取得先をopenweathermapさんに変更することにした。
openweathermapの利用登録
- openweathermapさんにてアカウント登録をする
- メールが届くのでリンクを踏んでアカウントの有効化
- メール宛にAPIキーが届きます(確かサイト内の自身プロフィールでも確認できます)
- APIキーが届いたら有効化されるまでにタイムラグがあるので待ちます
データの状態
こちらの記事がわかりやすかったのでここを参考にデータをいじってみた。
5日間天気予報(Call 5 day / 3 hour forecast data)の値一覧
require "net/http" require "uri" require "json" API_KEY = "YOUR_KEY" id = 1856035 uri = URI.parse("http://api.openweathermap.org/data/2.5/forecast?id=#{id}&appid=#{API_KEY}") json = Net::HTTP.get(uri) result = JSON.parse(json) p result["city"]["name"] p Time.at(result["list"][0]["dt"]) p Time.at(result["list"][8]["dt"])
上記コードのログ
"Tokyo" 2020-08-10 18:00:00 +0900 2020-08-11 18:00:00 +0900
RailsアプリでAPI取得を変更
元々あったAPIから得たjsonのデータ構造や名前などの違いを先ほど作ったコードで生のデータをいじりながら欲しいデータを取得できるように記述を変更していく。
seedデータを変更
アプリの使用上データベースに検索に用いるid
を登録しているため、以前の仕様のままのデータベースを新しい仕様のデータベースに変更する。
seed内のコードを書き換えたらテーブルを一新してシード値を埋め込みました。
$rails db:migrate:reset $rails db:migrate $rails db:seed
I18nで日本語表示にする
生データのままだと英語で天気情報が返ってきたので、I18nを用いて得られた生データを日本語表示にして出力する様にした。
背景を変更
生データの使用上背景を変更するプログラムが正常に動作しなかったためapp/view/weather/_template.html.erb
内の記述を変更
gitにあげる前にAPI_KEYを隠す
gitにあげる前にAPI_KEYを隠す必要があったので、dotenv-rails
を使用した。
Gemfileに
gem 'dotenv-rails'
を追加して$bundle install
する。~/.envファイルにAPI_KEYを記述
WEATHER_API_KEY=YOUR_API_KEY
- ~/.gitignoreに.envファイルを弾く様に記述
.env
終わりに
今回はやることが多かったので、その中でも大まかな流れだけを説明しました。
APIに依存するアプリケーションのメンテナンスの大変さを身にしみて感じる機会になった。