#!/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()