Add location handling to weather module
This commit is contained in:
parent
d203174912
commit
8b707d0045
@ -8,29 +8,51 @@
|
|||||||
# None
|
# None
|
||||||
#
|
#
|
||||||
# Commands:
|
# 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 <luogo>? - ottieni il meteo
|
||||||
#
|
#
|
||||||
# Author:
|
# Author:
|
||||||
# Enrico Fasoli (fazo96)
|
# Enrico Fasoli (fazo96)
|
||||||
|
# Michele Guerini Rocco (rnhmjoj)
|
||||||
|
|
||||||
moment = require 'moment'
|
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) ->
|
module.exports = (robot) ->
|
||||||
robot.respond /(?:che )?(?:tempo|meteo)(?: c'è| fa)?(?: a crema)?(?:\?)?/i, (res) ->
|
robot.respond /(?:(?:d(?:a|i)mmi il )?meteo(?: per (.+))?|che tempo (?:fa|c'è)(?: (?:a|in) (.+))?)\??$/i, (res) ->
|
||||||
url = 'http://api.openweathermap.org/data/2.5/weather?id=3177841&lang=it&units=metric'
|
find_location = (ip, callback) ->
|
||||||
robot.http(url)
|
robot.http(url1 + ip).get() (err, r, body) ->
|
||||||
.get() (err, r, body) ->
|
city = (JSON.parse body).city
|
||||||
if err
|
return res.send if err or not city?
|
||||||
return res.send 'Errore nel guardare il cielo.\n'+err
|
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
|
try
|
||||||
body = JSON.parse body
|
body = JSON.parse body
|
||||||
catch e
|
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?
|
unless body?.sys? and body?.main? and body?.weather?.push?
|
||||||
return res.send 'Errore nel guardare il cielo.\n'+JSON.stringify(body)
|
return res.send "#{err2}:\n#{JSON.stringify body}"
|
||||||
alba = moment.unix(body.sys.sunrise).format('H:MM')
|
|
||||||
tramonto = moment.unix(body.sys.sunset).format('H:MM')
|
dawn = (moment.unix body.sys.sunrise).format 'H:MM'
|
||||||
m = body.weather[0].description+' con '+body.main.humidity
|
dusk = (moment.unix body.sys.sunset ).format 'H:MM'
|
||||||
m += '% di umidità. Temperatura: '+Math.round(body.main.temp)+'°C. '
|
|
||||||
m += "l'alba è alle "+alba+" mentre il tramonto alle "+tramonto
|
res.send "meteo per #{body.name}:\n
|
||||||
res.send 'Meteo per Crema: '+m+'.'
|
#{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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user