CoffeeScript
Hubot
npm
天気
Slack

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

More than 1 year has passed since last update.

はじめに

hubot-slack-rainfall-alert という名前でnpmに公開しました。コードはgithubに公開しています。

CoffeeScriptというかjsも殆ど書いたことがないままとりあえず作ったので手続き型っぽくて汚いです。細かいところでも pull request 大歓迎です。よろしくお願いします。→ https://github.com/takashyx/hubot-slack-rainfall-alert/

これは何?

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

通知内容はこんな感じ。

必要な準備

YahooのAPP IDとGoogleのAPI keyが必要です。

インストール

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

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

その後hubot-slack-rainfall-alertexternal-scripts.jsonに追加

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

設定

環境変数で設定します。

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

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

  • 場所を指定して地図を表示する機能はこちらの実装を参考にさせていただきました。ありがとうございます。
  • すばらしいAPIと実装にハマった時の検索を提供してくださっているYahooさんGoogleさんに感謝。