今回はRuby on Jetsを使って天気予報を通知してくれるSlack Botを作ってみました。
仕様
毎朝7:00にその日の天気がslackに通知される仕組みにします。以下の情報をAPIから取得するようにします。
- 最高気温(daily.temp.max)
- 最低気温(daily.temp.min)
- 日中の気温(daily.temp.day)
- 降水確率(daily.pop)
- 天気の説明(daily.wather.description)
- 天気のアイコン(daily.wather.icon)
APIはOpenWeatherMap APIのOneCallAPI使用します。
実装
gemはslackを使用するのにslack-ruby-client、HTTPクライアントを使用するためにhttpartyを使用しました。
実装手順は大体前回の記事と同じ感じで、特に詰まることなく簡単に実装出来ました。
class TenkiJob < ApplicationJob URL = "https://api.openweathermap.org/data/2.5/onecall?lat=35.779553&lon=139.785015&exclude=current,minutely,hourly&appid=#{ENV["TENKI_API_TOKEN"]}&lang=ja&units=metric&ctn=1" cron "0 22 * * ? *" def tenki_notify response = HTTParty.get(URL) #今日のデータを取得する daily = response["daily"][0] #気温 max_temp = daily["temp"]["max"] min_temp = daily["temp"]["min"] day_temp = daily["temp"]["day"] #降水確率 pop = daily["pop"] #天気の状態とアイコンURL description = daily["weather"][0]["description"] icon_url = "http://openweathermap.org/img/wn/#{daily["weather"][0]["icon"]}@2x.png" # メッセージを作成する text = <<~"STR" 今日の天気情報です。 > 日中の気温: #{day_temp}°C > 最高気温: #{max_temp}°C > 最低気温: #{min_temp}°C > 降水確率: #{pop * 100}% > 今日の天気は#{description}です。 #{icon_url} STR # slackに送信する send_message(text) end private def send_message(text) client = Slack::Web::Client.new client.auth_test client.chat_postMessage(channel: "#lifestyle", text: text, as_user: true) end end
動作確認
コンソールから動くかどうかを確かめます。
$ jets console Jets booting up in development mode! irb(main):001:0> TenkiJob.perform_now(:tenki_notify)
無事に動くことが確認出来ました。
投げ銭していただける方は以下のボタンからよろしくお願いいたします。