Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

スクリーンショット 2018-07-19 16.16.30.png

お友達登録
友だち追加
スクリーンショット 2018-07-19 16.12.24.png

アプリ紹介

やること

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

毎時の通知・今の天気通知
スクリーンショット 2018-07-19 16.48.50.pngスクリーンショット 2018-07-19 16.50.51.png

どうやったか

言語とサーバー

今回、言語は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

hanlio
29歳でエンジニアを目指し、30でエンジニアとしてスタート。 とりあえず気になったものは触ってみる雑食系です。
https://zumikiti-note.netlify.app/posts/
qnote
猫と音楽とITをテーマにiOS/Android/Unity/Web/デザインの受託開発をやり続けて13年目の町工場的会社です。従業員の大半は猫です。
http://www.qnote.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away