【Hubot】天気を教えてくれるBot

Hubotを利用してSlackで天気を定期的に教えてくれる。
またはBotに聞いたら教えてくれるスクリプトを書いてみました。
使用するAPIは「OenWeatherMap」です。
無料である程度使えますが、更新間隔が1〜2時間ごとらしいので、
急な天候の変化については弱いかもです(:3_ヽ)_

APIのパラメーターは下記のとおりです。
【パラメータ(一部)】

パラメータ 説明 備考
q 温度の単位を指定する ({都市名},{国コード(ISO3166)} q=Tokyo,jp
東京の天気
mode 取得形式を指定する (省略時) JSON形式
xml XML形式
html HTML形式
units 温度の単位を指定する (省略時) ケルビン
metric 摂氏(°C)
imperial 華氏(°F)

下のコードはSlack上で「今日の天気」と書き込んだ時に天気を教えてくれるコードです。

# Description:
#   今日の天気を教えてくれます。
#
# Commands:
#   今日の天気
#

module.exports = (robot) ->

	send = (msg) -> 
		request = robot.http("http://api.openweathermap.org/data/2.5/weather?q=Tokyo,jp&appid=APIKEY&units=metric").get()

		stMessage = request (err, res, body) ->
			json = JSON.parse body
			weatherName = json['weather'][0]['main']
			icon = json['weather'][0]['icon']
			temp = json['main']['temp']
			temp_max = json['main']['temp_max']
			temp_min = json['main']['temp_min']
			msg.send "今日の東京の天気は「" + weatherName + "」です。\n気温:"+ temp + "℃ 最高気温:"  + temp_max+ "℃ 最低気温:" + temp_min + "℃\nhttp://openweathermap.org/img/w/" + icon + ".png"

	robot.hear /今日の天気/, (msg) ->
		send(msg)

Slack上での実行結果です。

天気を聞いた時

天気を聞いた時

下はCronJobを利用した定時実行版です。

cron = require('cron').CronJob

module.exports = (robot) ->

  sendWeather = (channel) -> 
    request = robot.http("http://api.openweathermap.org/data/2.5/weather?q=Tokyo,jp&appid=[APIKEY]&units=metric").get()
    stMessage = request (err, res, body) ->
      json = JSON.parse body
      weatherName = json['weather'][0]['main']
      icon = json['weather'][0]['icon']
      temp = json['main']['temp']
      temp_max = json['main']['temp_max']
      temp_min = json['main']['temp_min']
      sendMessage = "今日の東京の天気は「" + weatherName + "」です。\n気温:"+ temp + "℃ 最高気温:"  + temp_max+ "℃ 最低気温:" + temp_min + "℃\nhttp://openweathermap.org/img/w/" + icon + ".png"
      robot.send {room: channel}, sendMessage

   new cron('0 0 6 * * 0-6', () ->
    sendWeather('[ここにchannel_id]')
  ).start()

未だにCoffeeScriptの書き方がよく理解できていない(¦3 _ )=

1 COMMENT

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です