From 8b707d0045b963e83e163019efef183920fa78e6 Mon Sep 17 00:00:00 2001 From: rnhmjoj Date: Mon, 24 Aug 2015 03:47:55 +0200 Subject: [PATCH] Add location handling to weather module --- scripts/meteo.coffee | 52 +++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/scripts/meteo.coffee b/scripts/meteo.coffee index 00ca4ac..7605ebd 100644 --- a/scripts/meteo.coffee +++ b/scripts/meteo.coffee @@ -8,29 +8,51 @@ # None # # Commands: -# hubot che tempo fa/c'è (a crema)? - guarda il cielo e risponde con informazioni sul meteo di crema +# hubot meteo/che tempo fa/c'è a ? - ottieni il meteo # # Author: # Enrico Fasoli (fazo96) +# Michele Guerini Rocco (rnhmjoj) moment = require 'moment' +url1 = 'http://ip-api.com/json/' +url2 = 'http://api.openweathermap.org/data/2.5/weather?lang=it&units=metric&q=' + +err1 = 'non so dove sono: chiedimi un posto in particolare' +err2 = 'errore nel guardare il cielo' + module.exports = (robot) -> - robot.respond /(?:che )?(?:tempo|meteo)(?: c'è| fa)?(?: a crema)?(?:\?)?/i, (res) -> - url = 'http://api.openweathermap.org/data/2.5/weather?id=3177841&lang=it&units=metric' - robot.http(url) - .get() (err, r, body) -> - if err - return res.send 'Errore nel guardare il cielo.\n'+err + robot.respond /(?:(?:d(?:a|i)mmi il )?meteo(?: per (.+))?|che tempo (?:fa|c'è)(?: (?:a|in) (.+))?)\??$/i, (res) -> + find_location = (ip, callback) -> + robot.http(url1 + ip).get() (err, r, body) -> + city = (JSON.parse body).city + return res.send if err or not city? + console.log 'found ' + city + callback city + + send_weather = (city) -> + robot.http(url2 + city).get() (err, r, body) -> + return res.send "#{err2}\n #{err}" if err + try body = JSON.parse body catch e - return res.send 'Errore nel guardare il cielo.' + return res.send "#{err2}: #{e}" unless body?.sys? and body?.main? and body?.weather?.push? - return res.send 'Errore nel guardare il cielo.\n'+JSON.stringify(body) - alba = moment.unix(body.sys.sunrise).format('H:MM') - tramonto = moment.unix(body.sys.sunset).format('H:MM') - m = body.weather[0].description+' con '+body.main.humidity - m += '% di umidità. Temperatura: '+Math.round(body.main.temp)+'°C. ' - m += "l'alba è alle "+alba+" mentre il tramonto alle "+tramonto - res.send 'Meteo per Crema: '+m+'.' + return res.send "#{err2}:\n#{JSON.stringify body}" + + dawn = (moment.unix body.sys.sunrise).format 'H:MM' + dusk = (moment.unix body.sys.sunset ).format 'H:MM' + + res.send "meteo per #{body.name}:\n + #{Math.round body.main.temp} °C, #{body.weather[0].description} con + #{body.main.humidity}% di umidità. l'alba è alle #{dawn} mentre il + tramonto alle #{dusk}" + + city = res.match[1] || res.match[2] + + if not city? + find_location '', send_weather + else send_weather city +