超高速開発ツール”Wagby”で端末の位置情報を使って天気を自動的に記録する

超高速開発

今回は、前回作成した位置情報を取得する機能を利用して、その場所の天気を自動的に記録する機能を追加してみます。

超高速開発ツール”Wagby”で利用者の位置情報をアプリケーションログに出力する

OpenWeatherMapのAPIキーを取得する

天気のデータを取得するために、”OpenWeatherMap“を使います。OpenWeatherMapが提供しているAPIを使うためには、ユーザー登録したうえでOpenWeatherMapのAPI Keyを取得する必要があります。無料のプランをはじめとしていろいろとプランがありますが、今回は無料のプランで実験してみます。

Weather API - OpenWeatherMap
Simple and fast and free weather API from OpenWeatherMap you have access to current weather data, hourly, 5- and 16-day forecasts. Historical weather data for 4...

まずはアカウントを登録します。

f:id:cycle8b:20170331131457p:plain

アカウントを登録すると、マイページ的な画面にAPI Keyが表示されます。

f:id:cycle8b:20170331131819p:plain

OpenWeatherMapのAPIを試してみる

API Keyを使って現在の天気を取得します。緯度・経度から、その地点の現在の気象情報を取得する場合には、次のようなURLで取得できます。

http://api.openweathermap.org/data/2.5/weather?lon={経度}&lat={緯度}&APPID={OpenWeatherMapのAPIKey}

詳しい使い方は↓をご確認ください。

Current weather data - OpenWeatherMap
Access current weather data for any location on Earth. We collect and process weather data from different sources such as global and local weather models, satel...

2017-04-02 追記) パラメータの”緯度(latitude)“と”経度(longitude)”が逆だったので修正しました。毎回、どっちがどっちか、分からなくなってしまう・・・。

緯度、経度、latitude、longitude…どれがなんだっけ? - ぱせらんメモ
緯度、経度、latitude、longitude……どれがどれだかよくわからなくなるのでこうやって覚えた。 緯度 いど latitude ←短い 経度 けいど longitude ←長い 文字数が短い同士。 文字数が長い同士。しかもなんかlongとかついてるし!*1 そんで、緯度と経度はどっちがどっちなんだっけ? 北緯...

f:id:cycle8b:20170331164327p:plain

試しにこのURLをブラウザのアドレスバーに貼り付けてアクセスすると、次のような結果が得られます。(画像は、東京 丸の内の気象情報を取得した結果です。)

結果がJSON形式で返ってくるので、これをWagbyで読み込み&編集して、DBに保存します。

Wagbyに都市名と天気を保存する項目を追加する

前回作成した投稿モデルには、DBに保存しない隠し項目緯度経度が追加されています。今回はこれに、都市名天気を追加します。それぞれ、次のような型で作成します。

項目名項目ID型の詳細
都市city_name文字列文字列
天気weather文字列文字列

APIで取得した値を、登録時の初期値に設定する。

都市天気登録時の初期値として、それぞれの項目に式を設定します。(APPIDはご自身のAPI Keyを指定してください。)

f:id:cycle8b:20170331184452p:plain

都市

JSONPATH(
  HTTPSEND(
    CONCATENATE(
"http://api.openweathermap.org/data/2.5/weather?lon="
, TOSTR(${longitude}) , "&lat=" , TOSTR(${latitude}) , "&APPID=84xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") )
, "name" )

天気

JSONPATH(
  HTTPSEND(
    CONCATENATE(
"http://api.openweathermap.org/data/2.5/weather?lon="
, TOSTR(${longitude}) , "&lat=" , TOSTR(${latitude}) , "&APPID=84xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") )
, "weather[0]['description']" )

ビルド&確認

f:id:cycle8b:20170331181826p:plain

投稿を保存すると・・・

f:id:cycle8b:20170331184337p:plain

都市・天気が保存され、一覧に表示されています。

すごく単純なJSONパス式 - 檜山正幸のキマイラ飼育記 (はてなBlog)
JSONデータの一部にアクセスするためのパス式としては、既に JSONPath ( や JPath ( があります。どちらも、XPathのJSON版という位置づけ。これらは便利そうですが、僕の用途にはオーバースペックなので、もっと簡単で小さいな構文を考えてみました。まず、基本的な構文要素。一部、コメントでお茶を濁してま...

コメント

タイトルとURLをコピーしました