weather.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import urllib2
  2. import json
  3. class Weather:
  4. def __init__(self, events=None, printer_handle=None, bot=None):
  5. self.events = events
  6. self.printer = printer_handle
  7. self.interests = ['__.weather__']
  8. self.bot = bot
  9. self.help = ".weather <zipcode>"
  10. for event in events:
  11. if event._type in self.interests:
  12. # print "DEBUG: registering to ",
  13. # print event
  14. event.subscribe(self)
  15. def handle(self, event):
  16. _z = event.line.split()
  17. if _z[-1] != "":
  18. try:
  19. zipcode = _z[-1] # zipcode should be last word on line (.weather 95928, eg)
  20. url = 'http://api.wunderground.com/api/1fe31b3b4cfdab66/conditions/lang:EN/q/'+zipcode+'.json'
  21. try:
  22. response = urllib2.urlopen(url)
  23. # catch timeouts
  24. except urllib2.HTTPError:
  25. self.printer("PRIVMSG " + event.channel + " :Wunderground appears down. Sorry\n")
  26. return
  27. json_string = response.read()
  28. parsed_json = json.loads(json_string)
  29. self.printer("PRIVMSG " + event.channel + " :" + parsed_json['current_observation']['display_location']['city'] + ", " + parsed_json['current_observation']['display_location']['state'] + ": " + parsed_json['current_observation']['weather'] + ", " + parsed_json['current_observation']['feelslike_string'] + '\n')
  30. #self.printer("PRIVMSG " + event.channel + " :For complete info: http://www.wunderground.com/cgi-bin/findweather/hdfForecast?query="+zipcode + '\n')
  31. except KeyError:
  32. pass