1st dotfiles commit
This commit is contained in:
parent
39c99549d0
commit
a57c4c068f
31 changed files with 8636 additions and 0 deletions
83
waybar/scripts/weather_module.py
Executable file
83
waybar/scripts/weather_module.py
Executable file
|
|
@ -0,0 +1,83 @@
|
|||
#!/usr/bin/env python3
|
||||
import requests
|
||||
import json
|
||||
import sys
|
||||
import os
|
||||
|
||||
# CONFIGURATION
|
||||
import requests
|
||||
import json
|
||||
import sys
|
||||
import os
|
||||
|
||||
# CONFIGURATION
|
||||
API_KEY = "ebb6d6ea53be021675e3276f7fe8cd77" # Remplacez par votre clé OpenWeatherMap
|
||||
CITY = "Paris" # Ville par défaut si non précisée
|
||||
UNITS = "metric" # "metric" pour °C, "imperial" pour °F
|
||||
LANG = "fr" # "fr" pour français, "en" pour anglais
|
||||
|
||||
def get_weather():
|
||||
if not API_KEY or API_KEY == "VOTRE_CLE_API_ICI":
|
||||
return {"text": "❌ Clé API manquante", "class": "weather-error", "tooltip": "Configurez la clé API dans le script."}
|
||||
|
||||
try:
|
||||
url = f"https://api.openweathermap.org/data/2.5/weather?q={CITY}&appid={API_KEY}&units={UNITS}&lang={LANG}"
|
||||
response = requests.get(url, timeout=5)
|
||||
|
||||
if response.status_code == 401:
|
||||
return {"text": "❌ Clé API invalide", "class": "weather-error", "tooltip": "Erreur 401: Vérifiez votre clé OpenWeatherMap."}
|
||||
|
||||
if response.status_code == 404:
|
||||
return {"text": "❌ Ville introuvable", "class": "weather-error", "tooltip": f"La ville '{CITY}' n'a pas été trouvée."}
|
||||
|
||||
if response.status_code != 200:
|
||||
return {"text": "⚠️ Erreur API", "class": "weather-error", "tooltip": f"Code {response.status_code}: {response.text}"}
|
||||
|
||||
data = response.json()
|
||||
|
||||
# Extraction des données
|
||||
temp = data["main"]["temp"]
|
||||
description = data["weather"][0]["description"].capitalize()
|
||||
icon_code = data["weather"][0]["icon"]
|
||||
wind_speed = data["wind"]["speed"]
|
||||
|
||||
# Mapping des icônes OpenWeather vers les icônes Waybar standard (ou Unicode)
|
||||
# OpenWeather utilise des codes comme "10d", "01n". Waybar utilise souvent des noms ou des emojis.
|
||||
# Ici, nous utilisons des emojis pour une compatibilité universelle.
|
||||
icon = "☁️"
|
||||
if "01" in icon_code:
|
||||
icon = "☀️" if "d" in icon_code else "🌙"
|
||||
elif "02" in icon_code:
|
||||
icon = "⛅" if "d" in icon_code else "🌥️"
|
||||
elif "03" in icon_code or "04" in icon_code:
|
||||
icon = "☁️"
|
||||
elif "09" in icon_code or "10" in icon_code:
|
||||
icon = "🌧️"
|
||||
elif "11" in icon_code:
|
||||
icon = "⛈️"
|
||||
elif "13" in icon_code:
|
||||
icon = "❄️"
|
||||
elif "50" in icon_code:
|
||||
icon = "🌫️"
|
||||
|
||||
# Formatage du texte
|
||||
text = f"{icon} {int(temp)}°C"
|
||||
tooltip = f"{description}\nVent: {wind_speed} m/s\nVille: {data['name']}, {data['sys']['country']}"
|
||||
|
||||
return {
|
||||
"text": text,
|
||||
"tooltip": tooltip,
|
||||
"class": "weather-good" if temp > 10 else "weather-cold" if temp < 0 else "weather-warm"
|
||||
}
|
||||
|
||||
except requests.exceptions.Timeout:
|
||||
return {"text": "⏱️ Timeout", "class": "weather-error", "tooltip": "La requête a expiré."}
|
||||
except requests.exceptions.ConnectionError:
|
||||
return {"text": "🚫 Pas de réseau", "class": "weather-error", "tooltip": "Impossible de se connecter à OpenWeatherMap."}
|
||||
except Exception as e:
|
||||
return {"text": "❌ Erreur", "class": "weather-error", "tooltip": str(e)}
|
||||
|
||||
if __name__ == "__main__":
|
||||
result = get_weather()
|
||||
print(json.dumps(result))
|
||||
sys.stdout.flush()
|
||||
Loading…
Add table
Add a link
Reference in a new issue