Added forecast command to plugins/weather.py

This commit is contained in:
Luke Rogers 2012-02-23 15:35:40 +13:00
parent 7f53bdcb49
commit 6cad8792d4
2 changed files with 46 additions and 4 deletions

View file

@ -2,11 +2,9 @@
from util import hook, http
@hook.command(autohelp=False)
def weather(inp, nick='', server='', reply=None, db=None, notice=None):
".weather <location> [dontsave] -- gets weather data from Google"
def forecast(inp, nick='', server='', reply=None, db=None, notice=None, say=None):
".forecast <location> [dontsave] -- gets a weather forecast from Google"
loc = inp
dontsave = loc.endswith(" dontsave")
@ -16,6 +14,46 @@ def weather(inp, nick='', server='', reply=None, db=None, notice=None):
db.execute("create table if not exists weather(nick primary key, loc)")
if not loc: # blank line
loc = db.execute("select loc from weather where nick=lower(?)",
(nick,)).fetchone()
if not loc:
notice(forecast.__doc__)
return
loc = loc[0]
w = http.get_xml('http://www.google.com/ig/api', weather=loc)
w = w.find('weather')
if w.find('problem_cause') is not None:
notice("Couldn't fetch weather data for '%s', try using a zip or " \
"postal code." % inp)
return
city = w.find('forecast_information/city').get('data')
out = "%s: " % city
for elem in w.findall('forecast_conditions'):
info = dict((e.tag, e.get('data')) for e in elem)
info['high'] = elem.find('high').get('data')
info['low'] = elem.find('low').get('data')
out += '[%(day_of_week)s]: %(condition)s (H:%(high)sF'\
', L:%(low)sF) ' % info
return out
@hook.command(autohelp=False)
def weather(inp, nick='', server='', reply=None, db=None, notice=None):
".weather <location> [dontsave] -- gets weather data from Google"
loc = inp
dontsave = loc.endswith(" dontsave")
if dontsave:
loc = loc[:-9].strip().lower()
db.execute("create table if not exists weather(nick primary key, loc)")
if not loc:
loc = db.execute("select loc from weather where nick=lower(?)",
(nick,)).fetchone()
if not loc: