From e842d34c9ae3a48a78bbcaa5b9fc58216e1d49a6 Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Mon, 7 Oct 2024 13:30:57 -0500 Subject: refactor(i3blocks): move i3blocks to bin dir --- i3blocks/.local/bin/i3blocks-wttr | 152 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100755 i3blocks/.local/bin/i3blocks-wttr (limited to 'i3blocks/.local/bin/i3blocks-wttr') diff --git a/i3blocks/.local/bin/i3blocks-wttr b/i3blocks/.local/bin/i3blocks-wttr new file mode 100755 index 0000000..8ae4857 --- /dev/null +++ b/i3blocks/.local/bin/i3blocks-wttr @@ -0,0 +1,152 @@ +#!/usr/bin/env python3 + +import time + +import requests + +ICON = "\U000f046b" # 󰑫 + +WWO_CODE = { + "113": "Sunny", + "116": "PartlyCloudy", + "119": "Cloudy", + "122": "VeryCloudy", + "143": "Fog", + "176": "LightShowers", + "179": "LightSleetShowers", + "182": "LightSleet", + "185": "LightSleet", + "200": "ThunderyShowers", + "227": "LightSnow", + "230": "HeavySnow", + "248": "Fog", + "260": "Fog", + "263": "LightShowers", + "266": "LightRain", + "281": "LightSleet", + "284": "LightSleet", + "293": "LightRain", + "296": "LightRain", + "299": "HeavyShowers", + "302": "HeavyRain", + "305": "HeavyShowers", + "308": "HeavyRain", + "311": "LightSleet", + "314": "LightSleet", + "317": "LightSleet", + "320": "LightSnow", + "323": "LightSnowShowers", + "326": "LightSnowShowers", + "329": "HeavySnow", + "332": "HeavySnow", + "335": "HeavySnowShowers", + "338": "HeavySnow", + "350": "LightSleet", + "353": "LightShowers", + "356": "HeavyShowers", + "359": "HeavyRain", + "362": "LightSleetShowers", + "365": "LightSleetShowers", + "368": "LightSnowShowers", + "371": "HeavySnowShowers", + "374": "LightSleetShowers", + "377": "LightSleet", + "386": "ThunderyShowers", + "389": "ThunderyHeavyRain", + "392": "ThunderySnowShowers", + "395": "HeavySnowShowers", +} + +WEATHER_SYMBOL_WI_DAY = { + "Unknown": "", + "Cloudy": "", + "Fog": "", + "HeavyRain": "", + "HeavyShowers": "", + "HeavySnow": "", + "HeavySnowShowers": "", + "LightRain": "", + "LightShowers": "", + "LightSleet": "", + "LightSleetShowers": "", + "LightSnow": "", + "LightSnowShowers": "", + "PartlyCloudy": "", + "Sunny": "", + "ThunderyHeavyRain": "", + "ThunderyShowers": "", + "ThunderySnowShowers": "", + "VeryCloudy": "", +} + +WEATHER_SYMBOL_WI_NIGHT = { + "Unknown": "", + "Cloudy": "", + "Fog": "", + "HeavyRain": "", + "HeavyShowers": "", + "HeavySnow": "", + "HeavySnowShowers": "", + "LightRain": "", + "LightShowers": "", + "LightSleet": "", + "LightSleetShowers": "", + "LightSnow": "", + "LightSnowShowers": "", + "PartlyCloudy": "", + "Sunny": "", + "ThunderyHeavyRain": "", + "ThunderyShowers": "", + "ThunderySnowShowers": "", + "VeryCloudy": "", +} + + +def parse_data() -> str: + data = requests.get("https://wttr.in/?format=j1").json() + + current = next(iter(data.get("current_condition", [])), None) + + if current is None: + return "" + + code = current.get("weatherCode", "0") + key = WWO_CODE.get(code, "Unknown") + + local_obs_date, local_obs_time = current.get("localObsDateTime").split(maxsplit=1) + astronomy = next( + iter( + next( + w.get("astronomy") + for w in data.get("weather", []) + if w.get("date", None) == local_obs_date and w.get("astronomy", None) + ) + ), + None, + ) + + if astronomy is None: + return None + + local = time.strptime(local_obs_time, "%I:%M %p") + sunrise = time.strptime(astronomy.get("sunrise"), "%I:%M %p") + sunset = time.strptime(astronomy.get("sunset"), "%I:%M %p") + + if local > sunrise and local < sunset: + icon = WEATHER_SYMBOL_WI_DAY.get(key) + else: + icon = WEATHER_SYMBOL_WI_NIGHT.get(key) + + if temp := current.get("temp_C"): + return " {} {}°C ".format(icon, temp) + + +def main(): + try: + print(parse_data()) + except Exception: + print() + + +if __name__ == "__main__": + main() -- cgit v1.2.3-70-g09d2