Bluemixで天気予報 〜Weather Company Dataを試して見る


久々にBluemixに戻ってきました。
サービスとかが追加されて充実してきているし、逆に前に使っていたサービスが終了していたりしていました。このおかげで終了したEmbeddable Report ServiceというBI系のサービスが登録されたままになっていたので削除しようとしたけどconsoleから削除しようとするとエラーが出てしまって削除できなくなっていました。
サポートにチケットを切って調べてもらっているのですが、まだ解決できないので新しいBluemixのアカウントを作成して、こっち側で色々と試すことにします。
 
##Weather Company Dataとは


![Kobito.1JdZ3r.png](https://qiita-image-store.s3.amazonaws.com/0/89268/083cc404-257b-6d8e-5941-7fb601821e62.png "Kobito.1JdZ3r.png")

天気予報の情報を取得できるサービスでRESTで呼び出すことでデータを取得できます。
IBMがThe Weather Company という天気予報の会社を買収したことからBluemix上にサービスが追加されたようです。
天気予報って場所によって、時間によって刻一刻と変わっていく情報だし、この情報を使う仕組みってアイディアが湧いてきそう。

2017年6月現在の説明では、「警告: 現在、次の国または地域では、Weather Company Data for IBM Bluemix サービスを購入および使用いただけない場合があります。」ということで日本もこの中に含まれていましたが特に問題なく利用できるみたいです。

##できること
Bluemixのサービスの説明のところに詳細はかかれていますが何種類かの天気予報が取得できます。

*毎時の予報
*毎日の予報
*1 日の予報
*現在の状況
*履歴データ
*気象アラート
*気象年鑑サービス

##サービスの追加

Bluemixのコンソールからサービスを追加します。いつもように無料プランを選択。とりあえずはアプリケーションにはバインドしない状態で作成します。
簡単に追加できました。
![Kobito.o3p67R.png](https://qiita-image-store.s3.amazonaws.com/0/89268/ed544e10-7c54-1f11-586f-f48baa4e579e.png "Kobito.o3p67R.png")

後で利用するのでサービス資格情報からユーザー名とパスワードをメモしておきます。

##天気予報を取り出してみる

サービス単体での動作確認ができるようになっています。画面の右下のところにあるAPIをクリックすると用意されているAPIを呼び出すためのテストドライバー画面が表示されます。
![Kobito.vREXyG.png](https://qiita-image-store.s3.amazonaws.com/0/89268/0540fa2f-4f90-6610-06f4-eed399f13383.png "Kobito.vREXyG.png")

一通りのAPIの動作を画面からパラメータを入れてテストできるようになっています。
![スクリーンショット 2017-06-20 22.54.20.png](https://qiita-image-store.s3.amazonaws.com/0/89268/07e96a58-c074-534c-4288-9cb63ea2a068.png "スクリーンショット 2017-06-20 22.54.20.png")

Hourly Forecastを試してみます。
![スクリーンショット 2017-06-20 22.55.01.png](https://qiita-image-store.s3.amazonaws.com/0/89268/2bf44102-d197-4d93-0f08-aa9e8359f26f.png "スクリーンショット 2017-06-20 22.55.01.png")


緯度と軽度をパラメータとして必要としていますので、東京駅のあたりの緯度、経度を入手します。
[Geocoding](http://www.geocoding.jp)というサイトで検索できます。

![スクリーンショット 2017-06-20 22.56.59.png](https://qiita-image-store.s3.amazonaws.com/0/89268/2710e93f-bc7b-1acf-9085-1bbaa03fe8c4.png "スクリーンショット 2017-06-20 22.56.59.png")



APIのパラメータとしては小数点２位までが有効みたいです。（度分の分の単位ですね）[Geocoding](http://www.geocoding.jp)で取得する情報は分以下の数値も取得できますがAPIは小数点２位で切ってしまうようです。
言語は説明には記載されていませんでしたが日本語でも対応しています。
ja-JP　を指定してください。
また出力単位はmを指定するとメートル法で出力してくれます。

![スクリーンショット 2017-06-20 22.58.05.png](https://qiita-image-store.s3.amazonaws.com/0/89268/bf5d3f2b-5cce-69d2-1678-c1fc16fc2821.png "スクリーンショット 2017-06-20 22.58.05.png")


必要なパラメータを入力した後に、Try it outボタンを押下すると認証用のダイアログが表示されます。ここで先に入手しておいたWeather Company Dataサービスの承認情報を利用します。

結果はJSON形式で戻ってきます。
ちゃんと天気予報データみたいです。

```

{
  "metadata": {
    "language": "ja-JP",
    "transaction_id": "1497968621974:262817577",
    "version": "1",
    "latitude": 35.67,
    "longitude": 139.76,
    "units": "m",
    "expire_time_gmt": 1497970386,
    "status_code": 200
  },
  "forecasts": [
    {
      "class": "fod_long_range_daily",
      "expire_time_gmt": 1497970386,
      "fcst_valid": 1497909600,
      "fcst_valid_local": "2017-06-20T07:00:00+0900",
      "num": 1,
      "max_temp": null,
      "min_temp": 22,
      "torcon": null,
      "stormcon": null,
      "blurb": null,
      "blurb_author": null,
      "lunar_phase_day": 25,
      "dow": "火曜",
      "lunar_phase": "三日月",
      "lunar_phase_code": "WNC",
      "sunrise": "2017-06-20T04:25:32+0900",
      "sunset": "2017-06-20T18:59:51+0900",
      "moonrise": "2017-06-20T01:16:52+0900",
      "moonset": "2017-06-20T14:26:31+0900",
      "qualifier_code": null,
      "qualifier": null,
      "narrative": "夜遅く、雨降り始め。 最低気温22℃。",
      "qpf": 0.65,
      "snow_qpf": 0,
      "snow_range": "",
      "snow_phrase": "",
      "snow_code": "",
      "night": {
        "fcst_valid": 1497952800,
        "fcst_valid_local": "2017-06-20T19:00:00+0900",
        "day_ind": "N",
        "thunder_enum": 0,
        "daypart_name": "今夜",
        "long_daypart_name": "火曜夜",
        "alt_daypart_name": "今夜",
        "thunder_enum_phrase": null,
        "num": 1,
        "temp": 22,
        "hi": 24,
        "wc": 22,
        "pop": 70,
        "icon_extd": 7300,
        "icon_code": 12,
        "wxman": "wx2500",
        "phrase_12char": "",
        "phrase_22char": "",
        "phrase_32char": "今夜、雨",
        "subphrase_pt1": "",
        "subphrase_pt2": "",
        "subphrase_pt3": "",
        "precip_type": "rain",
        "rh": 80,
        "wspd": 16,
        "wdir": 201,
        "wdir_cardinal": "南南西",
        "clds": 88,
        "pop_phrase": "降雨確率は70%。",
        "temp_phrase": "最低気温22℃。",
        "accumulation_phrase": "",
        "wind_phrase": "南南西の風10～15キロメートル毎時。",
        "shortcast": "夜遅く、雨降り始め。",
        "narrative": "夜遅く、雨降り始め。 最低気温22℃。 南南西の風10～15キロメートル毎時。 降雨確率は70%。",
        "qpf": 0.65,
        "snow_qpf": 0,
        "snow_range": "",
        "snow_phrase": "",
        "snow_code": "",
        "vocal_key": "D2:DA02:X2800120021:S730021:TL22:W09R02:P9071",
        "qualifier_code": null,
        "qualifier": null,
        "uv_index_raw": 0,
        "uv_index": 0,
        "uv_warning": 0,
        "uv_desc": "弱い",
        "golf_index": null,
        "golf_category": ""
      }
    },

```

JSONの各要素の意味については確認しないといけないですが、ぱっと見た目でも面白そうなデータが戻ってきています。（風速がキロメートル毎時っていうのは少し日本人の感覚とは違いますが）
  
このREST APIはアプリケーションからも呼び出せるので手軽に天気情報をアプリケーションに追加できそうです。

## まとめ
今回、天気予報のデータがBulumixで利用できるよと聞いて試してみましたがいろんなことに利用できそうなので面白そうな仕組みを考えてみます。