Weather: do wunderground forecasts

tmp/79b4e7d7e0424f8155715d7c458859a1/head
Brian S. Stephan 10 years ago
parent 425db7be81
commit 49e83f18de

@ -81,6 +81,10 @@ class Weather(Module):
# current weather query
results = self.get_conditions_for_query(queryitems[1:])
return self.reply(connection, event, results)
elif queryitems[0] == "forecast":
# forecast query
results = self.get_forecast_for_query(queryitems[1:])
return self.reply(connection, event, results)
else:
# assume they wanted current weather
results = self.get_conditions_for_query(queryitems)
@ -198,6 +202,48 @@ class Weather(Module):
self.log.exception(e)
return "Error parsing results."
def get_forecast_for_query(self, queryitems):
"""Make a wunderground forecast call, return as string."""
# recombine the query into a string
query = ' '.join(queryitems)
query = query.replace(' ', '_')
try:
url = self.wu_base + ('{0:s}/q/{1:s}.json'.format('forecast',
query))
json_resp = urllib2.urlopen(url)
forecast_data = json.load(json_resp)
except IOError as e:
self.log.error("error while making forecast query")
self.log.exception(e)
raise
# forecast data is loaded. the rest of this is obviously specific to
# http://www.wunderground.com/weather/api/d/docs?d=data/forecast
self.log.debug(json.dumps(forecast_data, sort_keys=True, indent=4))
try:
# just see if we have forecast data
forecasts = forecast_data['forecast']['txt_forecast']
except KeyError as e:
# now we really know something is wrong
self.log.error("error or bad query in forecast lookup")
self.log.exception(e)
return "No results."
else:
try:
reply = "Forecast: "
for forecast in forecasts['forecastday'][0:5]:
reply += "{0:s}: {1:s} ".format(forecast['title'],
forecast['fcttext'])
return self._prettify_weather_strings(reply.rstrip())
except KeyError as e:
self.log.error("error or unexpected results in forecast reply")
self.log.exception(e)
return "Error parsing results."
def _get_api_key_from_db(self):
"""Get the API key string from the database, or None if unset."""

Loading…
Cancel
Save