Source code for modules.tzone

# Simple module to spit out the time in a city specified by user, poorly
# thrown together by mech
import sys
import json
from event import Event
try:
    import requests
except (ImportError, SystemError):
    print("Warning: tzone module requires requests")
    requests = object

try:
    if sys.version_info > (3, 0, 0):
        from .basemodule import BaseModule
    else:
        from basemodule import BaseModule
except (ImportError, SystemError):
    from modules.basemodule import BaseModule


[docs]class Tzone(BaseModule):
[docs] def post_init(self): tzone = Event("__.tzone__") tzone.define(msg_definition="^\\.tzone") tzone.subscribe(self) self.cmd = ".tzone" self.help = ".tzone <Insert location name/zip/airport(SFO,PDX,etc.)>" self.bot.register_event(tzone, self) self.url = "https://dev.virtualearth.net/REST/v1/TimeZone/query=" self.key = "?key=AuEaLSdFYvXwY4u1FnyP-f9l5u5Ul9AUA_U1F-eJ-8O_Fo9Cngl95z6UL0Lr5Nmx"
# TODO put in a minor work around for places like Chico california not working with just '.tzone Chico' # TODO split out verifying the location request is properly formatted into # its own function.
[docs] def request_api(self, location): """Takes the location provided and determines whether its a valid request and will return either the time of the location or a message instructing you how to the make the proper call""" url_query = None try: headers = { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', } url_query = self.url + location + self.key r = requests.get(url_query, headers=headers) j = json.loads(r.text) local_time_date = j["resourceSets"][0]["resources"][0]["timeZoneAtLocation"][ 0]["timeZone"][0]["convertedTime"]["localTime"].split("T") place = j["resourceSets"][0]["resources"][0]["timeZoneAtLocation"][0]["placeName"] """Checks to see if request is specific enough for one timezone""" multiple_locations = j["resourceSets"][0]["resources"][0]["timeZoneAtLocation"][0]["timeZone"] if len(multiple_locations) > 1: return "Multiple timezones returned, try being more specific" else: return str( place + ": " + local_time_date[1] + " (" + multiple_locations[0]['convertedTime']['timeZoneDisplayAbbr'] + ")") except IndexError: return "Not a valid request, try again." except ValueError: return "Not a valid request, try again." except KeyError: return "Not a valid request, try again."
[docs] def handle(self, event): try: if event.msg.startswith(".tzone"): split_tz = event.msg.split() if split_tz[1].lower() == "i7": self.say( event.channel, "We are playing at the same time we do every Saturday. 6am your time, 8pm ours.") else: if len(split_tz) > 2: tz = "+".join(split_tz[1:]) else: tz = split_tz[1].lower() self.say(event.channel, self.request_api(tz)) except TypeError: pass # Error gets caught here and in ValueError in request_api function