From f419f389ea563bded70b88b86d3db54d93d5adca Mon Sep 17 00:00:00 2001 From: schneefux Date: Wed, 9 Apr 2014 17:43:08 +0100 Subject: Add international weather If not in US, uses nearest city/town instead. Wunderground handles this without any changes. Verifies that Wunderground returns a forecase. --- client/populate.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/client/populate.py b/client/populate.py index 7253f06..0887648 100644 --- a/client/populate.py +++ b/client/populate.py @@ -2,6 +2,7 @@ import re from getpass import getpass import yaml from pytz import timezone +import feedparser def run(): @@ -48,14 +49,23 @@ def run(): profile['carrier'] = carrier # location + def verifyLocation(place): + feed = feedparser.parse('http://rss.wunderground.com/auto/rss_full/' + place) + numEntries = len(feed['entries']) + if numEntries==0: + return False + else: + print("Location saved as " + feed['feed']['description'][33:]) + return True + print( - "Location should be a 5-digit US zipcode (e.g., 08544). For weather requests.") - zipcode = clean_number(raw_input("Zipcode: ")) - while zipcode and len(zipcode) != 5: - print("Invalid zipcode. Must be 5 digits.") - zipcode = clean_number(raw_input("Zipcode: ")) - if zipcode: - profile['location'] = zipcode + "Location should be a 5-digit US zipcode (e.g., 08544). If you are outside the US, insert the name of your nearest big town/city. For weather requests.") + location = raw_input("Location: ") + while location and (verifyLocation(location)==False): + print("Weather not found. Please try another location.") + location = raw_input("Location: ") + if location: + profile['location'] = location # timezone print( -- cgit v1.3.1 From 2b129def696ac5ef6cc28f6c8d7b3dea86442337 Mon Sep 17 00:00:00 2001 From: schneefux Date: Wed, 9 Apr 2014 19:44:11 +0100 Subject: Weather module parses global forecasts correctly The weather module now checks to see if it is a global forecast, as the parsing needs to be slightly different if so --- client/modules/Weather.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/client/modules/Weather.py b/client/modules/Weather.py index 85a8f1d..7bb86ec 100644 --- a/client/modules/Weather.py +++ b/client/modules/Weather.py @@ -76,12 +76,18 @@ def handle(text, mic, profile): for entry in forecast: try: date_desc = entry['title'].split()[0].strip().lower() + if date_desc == 'forecast': #For global forecasts + date_desc = entry['title'].split()[2].strip().lower() + weather_desc = entry['summary'] - weather_desc = entry['summary'].split('-')[1] + elif date_desc == 'current': #For first item of global forecasts + continue + else: + weather_desc = entry['summary'].split('-')[1] #US forecasts if weekday == date_desc: output = date_keyword + \ - ", the weather will be" + weather_desc + "." + ", the weather will be " + weather_desc + "." break except: continue -- cgit v1.3.1