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

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

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



# WeatherCompanyの登録

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

<img width="935" alt="snip_20161203142337.png" src="https://qiita-image-store.s3.amazonaws.com/0/60109/af3446c7-9ec5-917f-8eec-87448bb15353.png">

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

<img width="850" alt="snip_20161203142445.png" src="https://qiita-image-store.s3.amazonaws.com/0/60109/17c60a00-38e3-4c2f-5324-01711c2cdf73.png">


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

<img width="654" alt="snip_20161029175802.png" src="https://qiita-image-store.s3.amazonaws.com/0/60109/123fe2db-343d-a518-d3fa-d740cd190981.png">


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

<img width="948" alt="snip_20161029175840.png" src="https://qiita-image-store.s3.amazonaws.com/0/60109/bd0d9372-a5c0-15d7-2864-2cf67f7530e4.png">


# OpenWhiskとWeather CompanyのBIND

OpenWhiskを開始します。

<img width="589" alt="snip_20161022155946.png" src="https://qiita-image-store.s3.amazonaws.com/0/60109/1ce4c814-1114-27bd-eea5-d45adeafcba4.png">


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

<img width="937" alt="snip_20161022171511.png" src="https://qiita-image-store.s3.amazonaws.com/0/60109/bbcfb567-bdb4-13a6-fba3-acc6face3fb9.png">


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


<img width="726" alt="snip_20161025222036.png" src="https://qiita-image-store.s3.amazonaws.com/0/60109/80dc87a0-2c9a-c3b5-5a59-06da64bf5477.png">

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

<img width="938" alt="snip_20161029164750.png" src="https://qiita-image-store.s3.amazonaws.com/0/60109/71612763-c6b6-21fe-ade1-7039908cafda.png">

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

<img width="739" alt="snip_20161203143942.png" src="https://qiita-image-store.s3.amazonaws.com/0/60109/22396041-410a-7f3c-f9d3-0a358956286d.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通知するアプリケーションも、
少しのコードで実現できてしまいます。

* [OpenWhiskでお天気情報をSlack通知](http://qiita.com/rina0521/items/8855c4a690c15f27fe06)