Weather: do wunderground forecasts
This commit is contained in:
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…
Reference in New Issue
Block a user