Railsで作った天気アプリのAPIを変更した話

はじめに

今回はRailsで作った天気アプリで使っていたlivedoor さんの天気APIがサービス終了していたので、APIの取得先をopenweathermapさんに変更することにした。

github.com

openweathermapの利用登録

  1. openweathermapさんにてアカウント登録をする
  2. メールが届くのでリンクを踏んでアカウントの有効化
  3. メール宛にAPIキーが届きます(確かサイト内の自身プロフィールでも確認できます)
  4. 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に依存するアプリケーションのメンテナンスの大変さを身にしみて感じる機会になった。