def get_weather(): city = id = "" lat, lon = wa.get_current_lat_lon() # Call api from www.openweathermap.org w, f = wa.get_weather_dicts(lat, lon, city, id) w = wa.get_current_weather(w) f = wa.get_forecast(f) fmt = "{}\n{}\nWeather information provided by openweathermap.org" return fmt.format(w, f)
def check_icons(icons, path): # Loop list of needed icons for icon in icons: # Check if we have them if os.path.exists(icon): continue # If any are missing then download what icons are needed print('=' * 20) wa.download_weather_icons(path)
def get_weather(): print('=' * 20) try: w, f = wa.pick_your_weather() except requests.ConnectionError or ValueError: print('=' * 20) sys.exit('Weather servers are busy. Try again in a few minutes...') # Call functions in WeatherAnywhere.py to retrieve weather data weather = wa.get_current_weather(w, f) forecast = wa.get_forecast(w, f) fmt = '{}\n\nWeather information provided by api.wunderground.com' forecast = fmt.format(forecast) return w, f, weather, forecast
def get_weather(): print('=' * 20) try: w, f = wa.pick_your_weather() except requests.ConnectionError or ValueError: print('=' * 20) sys.exit('Weather servers are busy. Try again in a few minutes...') # Call functions in WeatherAnywhere.py to retrieve weather data weather = wa.get_current_weather(w) forecast = wa.get_forecast(w,f) fmt = '{}\n\nWeather information provided by api.wunderground.com' forecast = fmt.format(forecast) return w, f, weather, forecast
def alerts(self, sender): # Retrieve alerts alerts = wa.get_alerts(json_w, json_f) ''' Kill sceneview to cut memory overhead, textview then loads much faster. Note too that when textview is loaded via .present() without killing the sceneview, the sceneview will lock up after closing the textview window. ''' self.remove_subview(self.scene_view) tv = ui.TextView() #w, h = ui.get_screen_size() #tv.frame = (0, 20, w, h / 1.2) tv.frame = self.bounds tv.border_color = 'grey' tv.border_width = 3 tv.background_color = ('white') tv.text = alerts tv.editable = False tv.selectable = False tv.font = ('<system>', 9) self.closebutton(tv) self.add_subview(tv)
def __init__(self, in_scene): # Set up title bar with web view button b1 = ui.ButtonItem('Web View', action = self.web_weather, tint_color = 'black') self.right_button_items = [b1] # If any severe weather then set up a button to view the alerts if len(wa.get_alerts(json_w, json_f)) != 0: b2 = ui.ButtonItem('Severe Weather Alert', action = self.alerts, tint_color = 'red') self.left_button_items = [b2] self.present('full_screen') self.scene_view = scene.SceneView(frame = self.bounds) self.scene_view.scene = in_scene self.add_subview(self.scene_view)
def web_weather(self, sender): ''' Kill sceneview to cut memory overhead...webview then loads much faster. Note too that when webview is loaded via .present() without killing the sceneview, the sceneview will lock up after closing the webview window. ''' self.remove_subview(self.scene_view) wv = ui.WebView() #w, h = ui.get_screen_size() #wv.frame = (0, 20, w, h / 1.2) wv.frame = self.bounds wv.border_color = 'grey' wv.border_width = 3 wv.scales_page_to_fit = True url = wa.get_web_weather(json_w) wv.load_url(url) self.closebutton(wv) self.add_subview(wv)
self.add_subview(wv) if __name__ == '__main__': ''' Query api for json outputs of current & extended weather & their respective reformatted outputs for use in scene. ''' json_w, json_f, w, f = get_weather() # Format extended forecast & plot scene coordinates to display it txt_wrapped_f, icon_y, y1_y2 = format_plot_weather(f) # Current weather info for scene header city_name, temp_now, conditions = wa.get_scene_header(json_w) # Get icons & 24 hr weather data for scene the_icons, the_hours, the_temps, the_pops = wa.get_icons_24h_data( json_w, json_f, icon_path) # Check for any missing icons before scene runs check_icons(the_icons, icon_path) # Debug #for ys in y1_y2: #print ys #for ys in icon_y: #print ys #sys.exit()
def web_weather(self, sender): wa.get_web_weather(json_w) self.close()
# If any are missing then download what icons are needed print('=' * 20) wa.download_weather_icons(path) ''' Query api for json outputs of current & extended weather & their respective reformatted outputs for use in scene ''' json_w, json_f, w, f = get_weather() # Format extended forecast & plot scene coordinates to display it txt_wrapped_f, icon_y, y1_y2 = format_plot_weather(f) # Current weather info for scene header city_name, temp_now, conditions = wa.get_scene_header(json_w) # Get icons & 24 hr weather data for scene the_icons, the_hours, the_temps, the_pops = wa.get_icons_24h_data(json_w, json_f, icon_path) # Check for any missing icons before scene runs check_icons(the_icons, icon_path) # Debug #for ys in y1_y2: #print ys #for ys in icon_y: #print ys #sys.exit() class MyScene(scene.Scene):
def get_icons(w,f,icon_path): return wa.get_weather_icons(w,f,icon_path)
def get_forecast(f): f = wa.get_forecast(f) fmt = '{}\n\nWeather information provided by openweathermap.org' return fmt.format(f)
def get_weather_now(w): return wa.get_current_weather(w)
def get_background_color(day): color = {1: [.5,.5,.5], # Medium grey 2: [.5,0,.5], # Purple 3: [.75,0,0], # Light red 4: [.5,0,0], # Medium red 5: [0,.5,.5], # Medium green 6: [1,.5,0], # Orange 7: [.25,.25,1]} # Light blue # Monday is 1, Sunday is 7 r,g,b = color[day] return r,g,b print('=' * 20) try: w,f = wa.pick_your_weather() except requests.ConnectionError or ValueError: print('=' * 20) sys.exit('Weather servers are busy. Try again in a few minutes...') weather_now = get_weather_now(w) forecast = get_forecast(f) icon_path = './icons/' weather_icons = get_icons(w,f, icon_path) # Loop list of needed icons for icon in weather_icons: # Check if we have them if os.path.exists(icon): continue # If missing then download what