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

コーディング不要!OpenWhiskでお天気情報を取得する

More than 3 years have passed since last update.

BluemixのOpenWhiskでお天気情報を取得する方法を記載します。

BluemixのOpenWhiskでは、
あらかじめWeather Companyを利用できるカタログが
用意されているため、Web画面からの操作だけで
お天気情報を取得できます。

WeatherCompanyの登録

お天気情報は、BluemixのWeather Companyというサービスを使ってデータを取得します。Weather Companyは、カタログのデータ&分析サービスにあります。

snip_20161203142337.png

サービスを選択すると、左側に不穏な文章が……↓
ここは気にせず、サービスを作成します。
(この文章の意味は、記事の後半にて判明します)

snip_20161203142445.png

Weather Compabyは、1分あたり10呼び出し、1月あたり10,000呼び出しまでは、
無料プランで利用できます。今回は無料プランを選びます。

snip_20161029175802.png

データ取得のための認証キーを発行します。
この認証キー(usernameとpassword)は
OpenWhiskで使用するため、メモ帳に張り付けておきます。

snip_20161029175840.png

OpenWhiskとWeather CompanyのBIND

OpenWhiskを開始します。

snip_20161022155946.png

最初は、Hello Worldを実行するアクションの編集画面が現れます。

snip_20161022171511.png

右上にある「カタログの表示」を選ぶと、
準備されたアプリケーションを選択する画面が現れます。

snip_20161025222036.png

WatsonやSlackもありますね!
ここでWeatherと書かれたアイコンを選択します。

snip_20161029164750.png

選択した画面です。わくわくしてきましたが、まだ実行はできません。
アクション実行するためにはBINDを選択する必要があります。
左側の、NEW BINDINGと書かれた6角形を選択してください。

snip_20161203143942.png

Configuration名はBIND設定の名前ですので、
自分がわかりやすい名前をつけます。

既存のサービスインスタンスの選択では、
先ほど登録したWeather Companyが表示されますが、
「最初から開始したい」を選択し、usernameとpasswordを入れてください。
構成の保存を選択し、BIND完了です。

NEW BINDを使わずとも、先ほど登録したWeather Companyを選択すればよいのでは?
と思われるかもしれません。が、2016.11現在、自動バインドを設定すると、
なぜかデータが取得できないので、上記の方法でバインドしています。
(原因不明。余計なデータがバインドされているのかな?)

お天気情報を取得しよう

JSONサンプル入力は、以下のような入力値を入れてみてください。
これは、東京駅の緯度(latitude)と経度(longitude)、そして取得情報(timePeriod)は、現在情報(current)です。
timePeriodは、他にも、「48hour」、「timeseries」、「10day」などを指定できるようです。

{
    "latitude": "35.68",
    "longitude": "139.76",
    "timePeriod": "current"
}

実行することで、以下のようなJSONが出力されます。

{
  "metadata": {
    "latitude": 35.68,
    "status_code": 200,
    "longitude": 139.76,
    "version": "1",
    "transaction_id": "1480739103827:281227878",
    "language": "en-US",
    "expire_time_gmt": 1480744800,
    "units": "m"
  },
  "observation": {
    "dewPt": 1,
    "blunt_phrase": null,
    "pressure_tend": 2,
    "pressure_desc": "Falling",
    "primary_swell_period": null,
    "feels_like": 14,
    "precip_hrly": null,
    "qualifier": null,
    "pressure": 1021.9,
    "obs_name": "Tokyo",
    "gust": null,
    "primary_wave_height": null,
    "rh": 39,
    "wc": 14,
    "heat_index": 14,
    "min_temp": null,
    "obs_id": "47662",
    "primary_wave_period": null,
    "vis": null,
    "qualifier_svrty": null,
    "max_temp": null,
    "primary_swell_height": null,
    "key": "47662",
    "secondary_swell_height": null,
    "day_ind": "D",
    "icon_extd": null,
    "water_temp": null,
    "clds": null,
    "wspd": 4,
    "expire_time_gmt": 1480744800,
    "temp": 14,
    "snow_hrly": null,
    "uv_desc": "Moderate",
    "wdir": 310,
    "valid_time_gmt": 1480737600,
    "wx_icon": null,
    "secondary_swell_direction": null,
    "class": "observation",
    "primary_swell_direction": null,
    "wdir_cardinal": "NW",
    "secondary_swell_period": null,
    "precip_total": null,
    "wx_phrase": null,
    "terse_phrase": null,
    "uv_index": 3
  }
}

パラメータにnullが多いですね。

はい、そうなんです。
現在、Weather Companyで
東京の天気を「予報」する情報は提供されていません。

では、ニューヨークの位置を指定するとどうなるでしょうか?

自由の女神像の緯度と経度を指定してみます。

{
    "latitude": "40.70",
    "longitude": "-74.25",
    "timePeriod": "current"
}

出力結果はこちら

{
  "metadata": {
    "latitude": 40.7,
    "status_code": 200,
    "longitude": -74.25,
    "version": "1",
    "transaction_id": "1477836300490:1798903958",
    "language": "en-US",
    "expire_time_gmt": 1477842300,
    "units": "m"
  },
  "observation": {
    "dewPt": 13,
    "blunt_phrase": "Much warmer than yesterday.",
    "pressure_tend": 0,
    "pressure_desc": "Steady",
    "primary_swell_period": null,
    "feels_like": 20,
    "precip_hrly": 0,
    "qualifier": "OQ0002",
    "pressure": 1013.6,
    "obs_name": "Newark International Airport",
    "gust": null,
    "primary_wave_height": null,
    "rh": 65,
    "wc": 20,
    "heat_index": 20,
    "min_temp": 7,
    "obs_id": "T72502000",
    "primary_wave_period": null,
    "vis": 16,
    "qualifier_svrty": "2",
    "max_temp": 20,
    "primary_swell_height": null,
    "key": "T72502000",
    "secondary_swell_height": null,
    "day_ind": "D",
    "icon_extd": 2600,
    "water_temp": null,
    "clds": "OVC",
    "wspd": 11,
    "expire_time_gmt": 1477842300,
    "temp": 20,
    "snow_hrly": 0,
    "uv_desc": "Low",
    "wdir": 260,
    "valid_time_gmt": 1477835100,
    "wx_icon": 26,
    "secondary_swell_direction": null,
    "class": "observation",
    "primary_swell_direction": null,
    "wdir_cardinal": "W",
    "secondary_swell_period": null,
    "precip_total": 0,
    "wx_phrase": "Cloudy",
    "terse_phrase": "Much warmer than yesterday.",
    "uv_index": 0
  }
}


そのため、最高気温(max_temp)や最低気温(min_temp)、
降水確率(precip_hrly)などが表示されていますね!
他にも、「今日の天気を一言で言うと?」といった
コメント情報も取得できています。

Weather Companyの登録時の不穏な文章は、
日本では取得データが少ないということだったんですね。
でも、現在の気温データなどが取得できるだけでも面白いですね。

おわりに

OpenWhiskといえば、Chainによる処理連携。
カタログには、Slack通知も用意されているので、
お天気情報をSlack通知するアプリケーションも、
少しのコードで実現できてしまいます。

rina0521
このアカウントで発信する内容は個人検証に基づくものであり、現在所属する会社の公式見解を示すものではありません。
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