1st dotfiles commit

This commit is contained in:
ohinh 2026-08-03 17:03:40 +02:00
parent 39c99549d0
commit a57c4c068f
31 changed files with 8636 additions and 0 deletions

View 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()