aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/i3blocks/.local/lib
diff options
context:
space:
mode:
Diffstat (limited to 'i3blocks/.local/lib')
-rwxr-xr-xi3blocks/.local/lib/i3blocks/i3blocks-wttr154
1 files changed, 154 insertions, 0 deletions
diff --git a/i3blocks/.local/lib/i3blocks/i3blocks-wttr b/i3blocks/.local/lib/i3blocks/i3blocks-wttr
new file mode 100755
index 0000000..1151a43
--- /dev/null
+++ b/i3blocks/.local/lib/i3blocks/i3blocks-wttr
@@ -0,0 +1,154 @@
+#!/usr/bin/env python3
+
+import os
+import subprocess
+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()