暑いから熱中症対策BOTを作ってみた

ここのところ、尋常じゃない暑さが続いているので、定期的に気温を通知してくれて、なおかつ注意喚起を促してくれるBOTがあったら良いな〜と思った。
なので作ってみた。

![スクリーンショット 2018-07-19 16.16.30.png](https://qiita-image-store.s3.amazonaws.com/0/185846/4acb9447-37a3-0010-43d5-b858eb2e1682.png)

**お友達登録**
<a href="https://line.me/R/ti/p/%40baz7403z"><img height="36" border="0" alt="友だち追加" src="https://scdn.line-apps.com/n/line_add_friends/btn/ja.png"></a>
![スクリーンショット 2018-07-19 16.12.24.png](https://qiita-image-store.s3.amazonaws.com/0/185846/7dd88360-7dc1-5967-3348-f7772b97d1ae.png)

#アプリ紹介
##やること
- 天気は、東京に限定。（`今後増やしたいが、一旦`）
- 9時〜19時の間、毎時天気・気温・湿度を監視。
- 気温30度以上or湿度80%以上の場合に注意喚起を促す。
- 毎朝6時に今日の天気を通知
- 対話型で今日、明日、明後日、現在の天気・気温・湿度を返信。

**毎時の通知・今の天気通知**
![スクリーンショット 2018-07-19 16.48.50.png](https://qiita-image-store.s3.amazonaws.com/0/185846/cc26eeb3-b00d-6d9b-b794-663df013df35.png)![スクリーンショット 2018-07-19 16.50.51.png](https://qiita-image-store.s3.amazonaws.com/0/185846/9d0fe140-77cb-86cb-f92d-cdb9920ab229.png)

#どうやったか
##言語とサーバー
今回、言語はRuby、サーバーはherokuを使用しました。
知人の以下記事を参考にしました。
**[「今日雨降るよちゃん」を作ってみよう！【初学者向け】〜Ruby on RailsによるLINE botチュートリアル②〜](https://note.mu/ysk1180/n/nabfead7e8502)**

私はRubyを書いたことがなかったのですが、記事のボットなら1日で作れました。
自分用に変更するのに、1週間ぐらいかかりました。

##毎時：OpenWeatherMap 
記事の毎時のお天気データは、[OpenWeatherMap](https://openweathermap.org/weather-conditions)を使用しました。
IDで大まかに以下のように、分岐を作成

```ruby
API_KEY = ENV["OPENWEATHER_API_KEY"]
BASE_URL = "http://api.openweathermap.org/data/2.5/weather"

〜（中略）〜

url = open( "#{BASE_URL}?q=Tokyo,jp&APPID=#{API_KEY}" )
res = JSON.parse( url.read , {symbolize_names: true} )

# 現在の天気
weather_id = res[:weather][0][:id].to_i

# weather_idを文字に変換
# 参考：https://www.sglabs.jp/openweathermap-api/
if weather_id == 800
  weather = "晴天"
elsif weather_id == 801
  weather = "晴れ"
elsif weather_id > 801
  weather = "曇り"
elsif weather_id >= 200 && weather_id < 300
  weather = "雷雨"
elsif weather_id >= 300 && weather_id < 400
  weather = "霧雨"
elsif weather_id == 500 || weather_id == 501
  weather = "雨"
elsif weather_id >= 502 && weather_id < 600
  weather = "大雨"
elsif weather_id >= 600 && weather_id < 700
  weather = "雪"
elsif weather_id >= 700 && weather_id < 800
  weather = "霧"
end

# 気温、湿度取得
temp_max = res[:main][:temp_max].to_i - 273
humidity = res[:main][:humidity].to_i

# temp_maxまたはhumidityがnilでなければ
if temp_max >= 30 || humidity >= 80
  if temp_max >= 33
    word1 = "今、とても気温が高いね。\n不要な外出は控えて！"
  elsif temp_max >= 30 && humidity >= 80
    word1 = "今、気温も湿度も高いね。"
  elsif temp_max >= 30
    word1 = "今、気温が高いね。"
  elsif humidity >= 80
    word1 = "今、気温はそこそこだけど、湿度が高くてムシムシするね。"
  end
  # weather_idによって対策をメッセージに載せる。
  if weather_id == 800 || weather_id == 801
    word2 = "日差しが強いので、日陰に移動して直射日光を避け、コンクリートやアスファルトの上は避けましょう。\n熱中症にならないように気をつけてね（＞＜）"
  elsif weather_id > 801
    word2 = "日差しが弱くても、熱中症にはなるからね！\n湿度が高いなら屋内だと、除湿機を使ってみましょう。\n外で風が弱ければ、扇子などで風を起こして体温の上昇を防ぎましょう。"
  else
    word2 = "こまめに水分補給して、熱中症にならないように気をつけてね（＞＜）"
  end
else
  word1 = "気温も湿度も落ち着いてるけど、注意してね。"
  word2 = "今日があなたにとっていい日になりますように（^^）"
end

puts "天気：#{weather}, 気温：#{temp_max}, 湿度：#{humidity}"

push =
  "現在の天気は#{weather}だよ。\n#{word1}\n気温： #{temp_max}度\n湿度： #{humidity}%\n#{word2}"
```

なお、日毎の天気は[記事](https://note.mu/ysk1180/n/nabfead7e8502)のやり方を流用し、[Japan Weather Forecast xml（日本お天気予報）の配信リスト](https://www.drk7.jp/weather/) を使用しました。

##熱中症に関する知識
ここは、PTである彼女に助けてもらいました。
[熱中症の知識と対策方法のまとめ](https://qiita.com/hanlio/private/f8fe48f4c4e77b12b40c)
対策方法とかも知っておくと、便利です。

#今後やりたいこと
##対処方法を必要な時に配信。
「聞かれた時・定期配信等どういった方法が良いか」、「対処方法をLINEで送るのが本当に良いか」など検討。

##所得したい地域を選べるようにしたい。
都道府県で大まかに47区分くらいはできるようにしたい。
ユーザ任意で設定できるようにするか、対話型で聞けるようにするか。

##HPも作る。
WEBページで週間や、時間ごとの天気が見れるようなものがあれば良いかな。
広告も貼れば、ここからお小遣いが・・・w