Bluemixで天気予報　〜Weather Company DataをNode-REDで利用してみる


[前回](http://qiita.com/saboten10/items/39b32bdad0d494a89c48)、BluemixのサービスとしてWeather Company Dataを登録してもともと用意されているAPIテスト用の画面を利用して天気予報データを取得してみましたが、いよいよ今回はアプリケーションに組み込んで利用してみます。RESTのAPIなのでいろんな言語から呼び出すことはできますが丁度同じくBluemixのNode-REDを試してみているところなのでこのフローの中から呼び出してみます。

##準備
Bluemixの中にサービスとしてWeather Company Dataを追加しておきます。また、今回はNode-REDを使うのでこれをアプリケーションとして追加しておきます。

##Node-REDのフロー定義
フローエディタを使ってノードを定義していきます。
今回作成するのは、あらかじめサービスとして登録しておいたWeather Company Dataを Node-REDのフローの中から呼び出してみる処理になります。
完成品はこんな感じです。これから中身を見ていきます。
![スクリーンショット 2017-06-22 16.41.42.png](https://qiita-image-store.s3.amazonaws.com/0/89268/c3ca7858-8d47-9c1e-7dfe-5b7dd27982d6.png "スクリーンショット 2017-06-22 16.41.42.png")
### inject node (timestamp)
フローを開始するために配置したノードです。左側のパレットの「入力」のところにあるinjectノードをドラッグしてきてください。

![スクリーンショット 2017-06-22 16.42.06.png](https://qiita-image-store.s3.amazonaws.com/0/89268/da517651-e138-1eb1-e9e7-a926aae46f10.png "スクリーンショット 2017-06-22 16.42.06.png")

### function node (set url)
Weather Company DataのURLをセットします。このURLはWeather Compnay Dataの接続情報をBluemix consoleで確認できます。

![Kobito.20dF9d.png](https://qiita-image-store.s3.amazonaws.com/0/89268/1130a282-8635-452f-04e1-f77df662ca3e.png "Kobito.20dF9d.png")

このURL文字列についてはWeather Company DataのAPIをテストするためのテストドライバー画面にURLが書かれているのでそれを利用しています。必要なパラメータもURLのGET引数でつけています。
この例は東京駅あたりの今後４８時間の天気を取得します。

```
// Tokyo weather data
msg.url = 'https://twcservice.mybluemix.net/api/weather/v1/geocode/35.67971/139.765125/forecast/hourly/48hour.json?language=ja-JP&units=m';
return msg;
```
### http request node (get weather data)
天気情報を取得するためにAPIを発行します。Basic認証のためのユーザーID、パスワードもWeather Company Dataの接続情報としてBluemixのコンソールで確認しておきます。

![Kobito.0s9JFB.png](https://qiita-image-store.s3.amazonaws.com/0/89268/73136303-031c-b7a9-42af-8a69dddc5414.png "Kobito.0s9JFB.png")

### debug node 
APIを発行した結果を表示するためにデバッグノードを連結します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/89268/be3ae6e5-2ad8-983c-4571-0a06f88f659a.png" width=60%>

##実行
完成したフローをフローエディタの右上にある「デプロイ」ボタンを押下してデプロイしてから実行します。
実行は、フロー上の「timestamp」ノードの左側にあるグレーのボタンみたいなのを押すことで開始されます。

処理を開始すると数秒すると処理が終わります。
結果はフローエディタの右側にあるデバッグ出力にて確認できます。
![スクリーンショット 2017-06-22 16.44.12.png](https://qiita-image-store.s3.amazonaws.com/0/89268/c24b910c-731a-3361-cc29-6f4ba8bdd608.png "スクリーンショット 2017-06-22 16.44.12.png")

結果はバッチリ取れていますね。現在から４８時間の指定された地点の天気予報がJSON形式の配列で戻ってきてます。

##別の作成方法
一度、このフローを作ってからNode-REDのフローエディタのパレットを見ていたらWeather Company Dataを取得するためのノードが用意されていました。^^;

それを使ってフローを作ってみると同じことがこうなります。

![スクリーンショット 2017-06-24 15.16.23.png](https://qiita-image-store.s3.amazonaws.com/0/89268/bf423eed-c3c2-81bc-bd2d-47adfa750fd1.png "スクリーンショット 2017-06-24 15.16.23.png")

### Weather insights node
専用のノードはアイコンも天気予報っぽくてかわいいです。このノードの中にURL、ユーザー名、パスワード、取得したい天気予報の種類など全部直接定義できるのでこっちのほうが便利です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/89268/1d399205-0bec-51a2-ab93-1bfa74ab5a41.png" width=70%>

### function node (parse result)
戻ってきたJSONの中から任意の値を取得するファンクションノードの例です。この例では一時間後の温度データを取り出しています。

```
msg.payload=msg.forecasts[0].temp;
return msg;
```

処理を実行するとデバッグタブに取り出した温度データが表示されています。暑いと思ったら２８度もあるんだ。。。

![スクリーンショット 2017-06-24 15.52.20.png](https://qiita-image-store.s3.amazonaws.com/0/89268/347f6a22-9f50-2309-3451-3b2576379b6e.png "スクリーンショット 2017-06-24 15.52.20.png")



##まとめ
Bluemix上のサービスとして登録したWeather Company DataをNode-REDのアプリケーションノードから呼び出して天気予報を取り出してみました。この方法でアプリケーションから天気予報データを利用できるようになりました。
Node-REDはこうやって外部のAPIを組み合わせて新しいサービスとして提供するのに簡単に構築できる仕組みです。アイディアの実証などにはピッタリだと思います。

## 参考
[Bluemixで天気予報 〜Weather Company Dataを試して見る](http://qiita.com/saboten10/items/39b32bdad0d494a89c48)