雨が降る・止む30分前にSlackに通知してくれるhubot用スクリプト



# はじめに
## hubot-slack-rainfall-alert という名前で[npm](https://www.npmjs.com/package/hubot-slack-rainfall-alert)に公開しました。コードは[github](https://github.com/takashyx/hubot-slack-rainfall-alert/)に公開しています。
**CoffeeScriptというかjsも殆ど書いたことがないままとりあえず作ったので手続き型っぽくて汚いです。細かいところでも pull request 大歓迎です。よろしくお願いします。→ [https://github.com/takashyx/hubot-slack-rainfall-alert/](https://github.com/takashyx/hubot-slack-rainfall-alert/)**

# これは何？
- YahooのAPIを利用して、hubotに雨が降る前・止む前にSlackの指定したチャンネルに通知をしてくれる機能を追加します。
- 通知時には現在から60分後までの雨量のグラフ、30分後の雨雲の様子、より詳しい雨雲情報へのリンクを表示します。
- cron形式でチェックするインターバルを指定できるので、夜中は動かさない、といった設定も可能です。
- そのままだとマップ画像のリンクが長くなりスマホで見にくくなるので、google URL Shortener で短縮しています。

通知内容はこんな感じ。

![](https://github.com/takashyx/hubot-slack-rainfall-alert/wiki/images/preview.png)

# 必要な準備
YahooのAPP IDとGoogleのAPI keyが必要です。

- Yahooはこちらから取得→[https://e.developer.yahoo.co.jp/dashboard/](https://e.developer.yahoo.co.jp/dashboard/) 以下のAPIに使っています
    + [YOLP(地図):気象情報API - Yahoo!デベロッパーネットワーク](http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/weather.html)
    + [YOLP(地図):Yahoo!スタティックマップAPI - Yahoo!デベロッパーネットワーク](http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/static.html#exp_weather)
    + [YOLP(地図):Yahoo!ジオコーダAPI - Yahoo!デベロッパーネットワーク](http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/geocoder.html)
- Googleはこちらから取得→[https://console.developers.google.com/project/](https://console.developers.google.com/project) 以下のAPIに使っています
    + [URL Shortener  |  Google Developers](https://developers.google.com/url-shortener/)


#インストール

お手持ちのSlack用Hubotのルートディレクトリにて

```bash
npm install hubot-slack-rainfall-alert --save
```

その後`hubot-slack-rainfall-alert`を`external-scripts.json`に追加


```bash
$ cat external-scripts.json
[
  ... ,
  "hubot-slack-rainfall-alert",
  ...
]
```

#設定

環境変数で設定します。

緯度経度が必要ですが、住所から緯度経度を調べる場合、google maps上で任意の場所を右クリック→「この場所について」　から見るか、[こういったサイト](http://www.geocoding.jp/)を利用すると便利です。

```bash
export HUBOT_RAINFALL_ALERT_YAHOO_APP_ID=[yahoo app id]
export HUBOT_RAINFALL_ALERT_GOOGLE_API_KEY=[google api key]
export HUBOT_RAINFALL_ALERT_CHANNEL_ID=[通知するチャンネルID 例: "C035AFECB" ID はこちらから取得可能です→ https://api.slack.com/methods/channels.list/test]
export HUBOT_RAINFALL_ALERT_THRESH=[通知する雨量のしきい値(mm/h) 例: "0.5"]
export HUBOT_RAINFALL_ALERT_CRONTIME=[定期的にチェックするインターバルをcron形式で指定 例: "0 */10 0,9-23 * * *"]
export HUBOT_RAINFALL_ALERT_LAT=[雨量をチェックする場所の緯度を指定 例: "35.0000000"]
export HUBOT_RAINFALL_ALERT_LON=[雨量をチェックする場所の経度を指定 例: "139.8000000"]
export HUBOT_RAINFALL_ALERT_LAT_FOR_MAP=[雨雲マップに表示する中心の緯度を指定 例: "35.0000000"]
export HUBOT_RAINFALL_ALERT_LON_FOR_MAP=[雨雲マップに表示する中心の経度を指定 これから来る雨雲が見やすいように、HUBOT_RAINFALL_ALERT_LONより0.8ほど小さい値をおすすめ 例: "139.0000000"]
export HUBOT_RAINFALL_ALERT_IMAGE_WIDTH=[雨量グラフ・雨雲マップ画像の横幅　おすすめ: "500"]
export HUBOT_RAINFALL_ALERT_IMAGE_HEIGHT=[雨雲マップ画像の縦幅　おすすめ: "500"]
```

# おまけ機能
botがinviteされているどのチャンネルでも機能します。hubotに@する必要はありません。

- `rainfallcheck` で今すぐ30分後の雨の状況をチェックできます。
- `rainfall 場所名` で【場所名】の現在の雨雲の状況が見られます。
- `rainfall zoom 場所名` で【場所名】の現在の雨雲の状況がちょっとズームして見られます。


# Special thanks
- 場所を指定して地図を表示する機能は[こちら](https://github.com/asmz/hubot-yahoo-amagumo)の実装を参考にさせていただきました。ありがとうございます。
- すばらしいAPIと実装にハマった時の検索を提供してくださっているYahooさんGoogleさんに感謝。