py_atmo_data_wrapper/examples/example_save_files.py
2025-07-14 17:56:57 +02:00

185 lines
No EOL
6.2 KiB
Python

#!/usr/bin/env python3
"""
Exemples d'utilisation de la fonctionnalité de sauvegarde du wrapper AtmoDataClient
"""
from atmo_data_wrapper import AtmoDataClient, AtmoDataException
from atmo_data_wrapper import AASQA_CODES, POLLUANTS
from datetime import datetime, timedelta
import os
def main():
"""Exemples de sauvegarde de données"""
print("=== Exemples de sauvegarde de données API Atmo ===\n")
# Initialisation du client
client = AtmoDataClient()
# Note: Pour ces exemples, nous utilisons des données factices
# car nous n'avons pas d'authentification réelle
# Données d'exemple au format GeoJSON (structure typique de l'API)
sample_geojson_data = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [2.3522, 48.8566] # Paris
},
"properties": {
"code_zone": "75056",
"nom_zone": "Paris",
"aasqa": "11",
"nom_aasqa": "Airparif",
"date": "2024-07-07",
"code_qualificatif": "2",
"qualificatif": "Moyen",
"polluant_principal": "PM10",
"valeur": 45.2
}
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [2.2945, 48.8584] # Boulogne
},
"properties": {
"code_zone": "92012",
"nom_zone": "Boulogne-Billancourt",
"aasqa": "11",
"nom_aasqa": "Airparif",
"date": "2024-07-07",
"code_qualificatif": "3",
"qualificatif": "Dégradé",
"polluant_principal": "NO2",
"valeur": 52.8
}
}
]
}
# Exemple 1: Sauvegarde en JSON
print("1. Sauvegarde en format JSON...")
try:
json_file = client.save_to_file(
data=sample_geojson_data,
filename="data/indices_atmo",
file_format="json"
)
print(f"✅ Fichier JSON sauvegardé: {json_file}")
except Exception as e:
print(f"❌ Erreur JSON: {e}")
# Exemple 2: Sauvegarde en GeoJSON
print("\n2. Sauvegarde en format GeoJSON...")
try:
geojson_file = client.save_to_file(
data=sample_geojson_data,
filename="data/indices_atmo_geo",
file_format="geojson"
)
print(f"✅ Fichier GeoJSON sauvegardé: {geojson_file}")
except Exception as e:
print(f"❌ Erreur GeoJSON: {e}")
# Exemple 3: Sauvegarde en CSV
print("\n3. Sauvegarde en format CSV...")
try:
csv_file = client.save_to_file(
data=sample_geojson_data,
filename="data/indices_atmo",
file_format="csv"
)
print(f"✅ Fichier CSV sauvegardé: {csv_file}")
except Exception as e:
print(f"❌ Erreur CSV: {e}")
# Exemple 4: Sauvegarde avec chemin complet
print("\n4. Sauvegarde avec chemin personnalisé...")
try:
custom_file = client.save_to_file(
data=sample_geojson_data,
filename="exports/qualite_air/paris_2024",
file_format="json"
)
print(f"✅ Fichier personnalisé sauvegardé: {custom_file}")
except Exception as e:
print(f"❌ Erreur sauvegarde personnalisée: {e}")
# Exemple 5: Gestion d'erreurs - format invalide
print("\n5. Test de validation - format invalide...")
try:
client.save_to_file(
data=sample_geojson_data,
filename="test",
file_format="xml" # Format non supporté
)
print("❌ Validation échouée - format invalide accepté")
except ValueError as e:
print(f"✅ Validation réussie: {e}")
# Exemple 6: Workflow complet avec récupération de données
print("\n6. Exemple de workflow complet (simulation)...")
try:
# Simulation d'un appel API réel
print(" - Récupération des indices ATMO (simulé)...")
# indices = client.get_indices_atmo(aasqa="11", date="2024-07-07")
# Utilisation des données d'exemple
print(" - Sauvegarde des données...")
workflow_file = client.save_to_file(
data=sample_geojson_data,
filename=f"exports/daily/indices_atmo_{datetime.now().strftime('%Y%m%d')}",
file_format="csv"
)
print(f"✅ Workflow terminé: {workflow_file}")
# Affichage des informations sur le fichier
if os.path.exists(workflow_file):
size = os.path.getsize(workflow_file)
print(f" - Taille du fichier: {size} bytes")
print(f" - Nombre de lignes: {len(sample_geojson_data['features']) + 1}") # +1 pour l'en-tête
except Exception as e:
print(f"❌ Erreur workflow: {e}")
# Exemple 7: Données sans géométrie (pour test CSV)
print("\n7. Test CSV sans coordonnées...")
sample_data_no_geom = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": None,
"properties": {
"code_zone": "75056",
"nom_zone": "Paris",
"date": "2024-07-07",
"indice_atmo": 3,
"qualificatif": "Dégradé"
}
}
]
}
try:
no_geom_file = client.save_to_file(
data=sample_data_no_geom,
filename="data/indices_sans_coordonnees",
file_format="csv"
)
print(f"✅ CSV sans géométrie sauvegardé: {no_geom_file}")
except Exception as e:
print(f"❌ Erreur CSV sans géométrie: {e}")
print("\n=== Exemples terminés ===")
print("\nFichiers créés dans:")
print("- ./data/")
print("- ./exports/")
if __name__ == "__main__":
main()