ここのところ、尋常じゃない暑さが続いているので、定期的に気温を通知してくれて、なおかつ注意喚起を促してくれるBOTがあったら良いな〜と思った。
なので作ってみた。
アプリ紹介
やること
- 天気は、東京に限定。(
今後増やしたいが、一旦
) - 9時〜19時の間、毎時天気・気温・湿度を監視。
- 気温30度以上or湿度80%以上の場合に注意喚起を促す。
- 毎朝6時に今日の天気を通知
- 対話型で今日、明日、明後日、現在の天気・気温・湿度を返信。
どうやったか
言語とサーバー
今回、言語はRuby、サーバーはherokuを使用しました。
知人の以下記事を参考にしました。
「今日雨降るよちゃん」を作ってみよう!【初学者向け】〜Ruby on RailsによるLINE botチュートリアル②〜
私はRubyを書いたことがなかったのですが、記事のボットなら1日で作れました。
自分用に変更するのに、1週間ぐらいかかりました。
毎時:OpenWeatherMap
記事の毎時のお天気データは、OpenWeatherMapを使用しました。
IDで大まかに以下のように、分岐を作成
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}"
なお、日毎の天気は記事のやり方を流用し、Japan Weather Forecast xml(日本お天気予報)の配信リスト を使用しました。
熱中症に関する知識
ここは、PTである彼女に助けてもらいました。
熱中症の知識と対策方法のまとめ
対策方法とかも知っておくと、便利です。
今後やりたいこと
対処方法を必要な時に配信。
「聞かれた時・定期配信等どういった方法が良いか」、「対処方法をLINEで送るのが本当に良いか」など検討。
所得したい地域を選べるようにしたい。
都道府県で大まかに47区分くらいはできるようにしたい。
ユーザ任意で設定できるようにするか、対話型で聞けるようにするか。
HPも作る。
WEBページで週間や、時間ごとの天気が見れるようなものがあれば良いかな。
広告も貼れば、ここからお小遣いが・・・w