#!/usr/bin/python2 """ tfw.py - the fucking weather module author: mutantmonkey """ from urllib.parse import quote as urlquote from urllib.error import HTTPError import web import lxml.html def tfw(phenny, input, fahrenheit=False, celsius=False): """.tfw - Show the fucking weather at the specified location.""" zipcode = input.group(2) if not zipcode: # default to Blacksburg, VA zipcode = "24060" if fahrenheit: celsius_param = "" else: celsius_param = "&CELSIUS=yes" try: req = web.get("http://thefuckingweather.com/?zipcode=%s%s" % (urlquote(zipcode), celsius_param)) except (HTTPError, IOError): phenny.say("THE INTERNET IS FUCKING BROKEN. Please try again later.") return doc = lxml.html.fromstring(req) location = doc.find_class('small')[0].text_content() try: weather = doc.get_element_by_id('content') except KeyError: phenny.say("Unknown location") return main = weather.find_class('large') # temperature is everything up to first
tempt = "" for c in main[0].text: if c.isdigit(): tempt += c temp = int(tempt) deg = chr(176) # add units and convert if necessary if fahrenheit: temp = "%d%cF?!" % (temp, deg) elif celsius: temp = "%d%cC?!" % (temp, deg) else: tempev = (temp + 273.15) * 8.617343e-5 * 1000 temp = "%f meV?!" % tempev # parse comment (broken by
, so we have do it this way) comments = main[0].xpath('text()') if len(comments) > 2: comment = "%s %s" % (comments[1], comments[2]) else : comment = comments[1] # remark is in its own div, so we have it easy remark = weather.get_element_by_id('remark').text_content() response = "%s %s - %s - %s" % (temp, comment, remark, location) phenny.say(response) tfw.rule = (['tfw'], r'(.*)') def tfwf(phenny, input): """.tfwf - The fucking weather, in fucking degrees Fahrenheit.""" return tfw(phenny, input, fahrenheit=True) tfwf.rule = (['tfwf'], r'(.*)') def tfwc(phenny, input): """.tfwc - The fucking weather, in fucking degrees celsius.""" return tfw(phenny, input, celsius=True) tfwc.rule = (['tfwc'], r'(.*)') if __name__ == '__main__': print(__doc__.strip())