py_atmo_data_wrapper/demos/demo_complete.py
2025-07-14 17:56:57 +02:00

165 lines
No EOL
6.6 KiB
Python

#!/usr/bin/env python3
"""
Démonstration complète du wrapper Atmo Data API
avec connexion réelle et toutes les fonctionnalités
"""
from atmo_data_wrapper import AtmoDataClient, AtmoDataException
from datetime import datetime, timedelta
import os
def main():
"""Démonstration complète de toutes les fonctionnalités"""
print("🌍 === DÉMONSTRATION ATMO DATA API ===\n")
try:
# 1. Connexion automatique
print("1. 🔐 Connexion à l'API...")
client = AtmoDataClient()
success = client.auto_login()
if not success:
print("❌ Échec de connexion")
return
print(f"✅ Connecté à {client.base_url}")
print(f" Token: {client.token[:20]}...")
print()
# 2. Indices ATMO avec objets typés
print("2. 🏭 Récupération des indices de qualité de l'air...")
today = datetime.now().strftime('%Y-%m-%d')
indices = client.get_indices_atmo(date=today, aasqa='11') # Île-de-France
print(f"{len(indices)} indices récupérés")
print(f" Résumé: {indices.to_summary()}")
# Examiner quelques indices
print("\n 📊 Exemples d'indices:")
for i, indice in enumerate(indices[:3]):
print(f"{indice.lib_zone}: {indice.get_qualificatif()}")
if indice.is_poor_quality():
worst_pol, code = indice.get_worst_pollutant()
print(f" ⚠️ Attention: {worst_pol} élevé ({code})")
print()
# 3. Épisodes de pollution
print("3. 🚨 Vérification des épisodes de pollution...")
episodes = client.get_episodes_3jours(aasqa='11')
print(f"{len(episodes)} épisodes trouvés")
alerts_actives = [ep for ep in episodes if ep.is_alert_active()]
if alerts_actives:
print(f" ⚠️ {len(alerts_actives)} alertes actives:")
for ep in alerts_actives[:3]:
print(f"{ep.lib_zone}: {ep.get_alert_level()} - {ep.lib_pol}")
else:
print(" ✅ Aucune alerte active")
print()
# 4. Données d'émissions
print("4. 🏭 Analyse des émissions...")
emissions = client.get_emissions(aasqa='11', echelle='region')
print(f"{len(emissions)} territoires analysés")
if len(emissions) > 0:
em = emissions[0]
print(f" 📍 {em.name}:")
print(f" • Population: {em.population:,.0f} habitants")
total_em = em.get_total_emissions()
print(f" • Émissions NOx: {total_em['NOx']:,.1f} t/an")
print(f" • Émissions PM10: {total_em['PM10']:,.1f} t/an")
# Calculs par habitant
nox_per_capita = em.get_emission_per_capita('nox') * 1000 # kg/hab
print(f" • NOx par habitant: {nox_per_capita:.2f} kg/hab/an")
print()
# 5. Indices pollen
print("5. 🌸 Vérification des indices pollen...")
try:
pollens = client.get_indices_pollens(aasqa='11')
print(f"{len(pollens)} stations pollen")
alerts_pollen = [p for p in pollens if p.is_alert_active()]
if alerts_pollen:
print(f" ⚠️ {len(alerts_pollen)} alertes pollen actives")
for pol in alerts_pollen[:3]:
dangerous = pol.get_dangerous_pollens()
if dangerous:
print(f" • Pollens à risque: {', '.join(dangerous)}")
else:
print(" ✅ Pas d'alerte pollen majeure")
except Exception as e:
print(f" ⚠️ Indices pollen indisponibles: {e}")
print()
# 6. Sauvegarde des données
print("6. 💾 Sauvegarde des données...")
try:
# Créer le dossier de sauvegarde
save_dir = f"export_{today}"
# Sauvegarder en différents formats
json_file = client.save_to_file(indices.raw_data, f"{save_dir}/indices_idf", "json")
csv_file = client.save_to_file(indices.raw_data, f"{save_dir}/indices_idf", "csv")
print(f"✅ Données sauvegardées:")
print(f" • JSON: {json_file} ({os.path.getsize(json_file):,} bytes)")
print(f" • CSV: {csv_file} ({os.path.getsize(csv_file):,} bytes)")
except Exception as e:
print(f" ❌ Erreur sauvegarde: {e}")
print()
# 7. Analyse statistique
print("7. 📈 Analyse statistique...")
stats = indices.get_statistics()
qs = stats['quality_stats']
print(f"✅ Statistiques de qualité de l'air:")
print(f" • Qualité moyenne: {qs['moyenne']:.1f}/7")
print(f" • Bonne qualité: {qs['bon_pourcentage']:.1f}% des zones")
print(f" • Meilleur indice: {qs['min']}")
print(f" • Pire indice: {qs['max']}")
# Classification des zones
bonnes = [i for i in indices if i.is_good_quality()]
mauvaises = [i for i in indices if i.is_poor_quality()]
print(f" • Zones de bonne qualité: {len(bonnes)}")
print(f" • Zones de qualité dégradée: {len(mauvaises)}")
if mauvaises:
print(" ⚠️ Zones à surveiller:")
for zone in mauvaises[:5]:
print(f" - {zone.lib_zone}: {zone.get_qualificatif()}")
print()
# 8. Recommandations
print("8. 💡 Recommandations...")
if qs['moyenne'] <= 2:
print("✅ Qualité de l'air globalement bonne en Île-de-France")
elif qs['moyenne'] <= 3:
print("⚠️ Qualité de l'air modérée - Surveillance recommandée")
else:
print("🚨 Qualité de l'air dégradée - Précautions recommandées")
if alerts_actives:
print("🚨 Épisodes de pollution en cours - Limitez les activités extérieures")
print("\n🎉 === DÉMONSTRATION TERMINÉE ===")
print(f"📊 Données analysées: {len(indices)} indices, {len(episodes)} épisodes, {len(emissions)} territoires")
print("💾 Fichiers exportés dans le dossier export_*")
except AtmoDataException as e:
print(f"❌ Erreur API: {e}")
except Exception as e:
print(f"❌ Erreur inattendue: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
main()