====== Bonus : Ajouter la pression atmosphérique avec l’API OpenWeather ====== Afficher la pression atmosphérique récupérée sur Internet, en complément des données relevées par la sonde DHT22 sur le Raspberry Pi. ===== Créer un compte sur OpenWeather ===== - Aller sur [[https://openweathermap.org|https://openweathermap.org]] - Cliquer sur "Sign in" en haut de la page. - Cliquer sur "Create an account". - Remplir le formulaire et valider le compte. - Cliquer sur "My API keys". {{ raspberry:openweather.png?400 }} 6. copier la clé affichée (garde-la précieusement !). ===== Installer la bibliothèque requests ===== ### Nous allons utiliser la **bibliothèque requests** pour faire des **appels à l’API**. Dans votre environnement virtuel Python, vous pouvez taper cette commande : ### pip3 install requests ### Dans le haut de votre script, ajoutez l'import de cette bibliothèque : ### import requests ===== Nouvelles constantes ===== Ajoutons 4 nouvelles constantes : * Dans la section des couleurs, vous pouvez ajouter une couleur pour l'affichage de la pression atmosphérique. CYAN = "\033[96m" * Créer une nouvelle section pour les **coordonnées GPS** d'Arles. # Coordonnées GPS d'Arles LATITUDE = 43.6768 LONGITUDE = 4.6303 * Enfin, ajouter la **clé API**. # Clé API API_KEY = "Votre_clé" **Attention** : Ici, nous mettons directement la clé API dans le code. En faisant cela, nous créons une faille de sécurité car nous exposons publiquement une donnée sensible. ===== Création d'une nouvelle fonction ===== ### Cette fonction interroge le **service météo OpenWeather** pour récupérer la **pression atmosphérique actuelle** en fonction de la **position géographique (latitude/longitude)**. ### def recuperer_pression(api_key, latitude, longitude): Elle prend en paramètre : * API_KEY → la clé personnelle d’API fournie par OpenWeather, * LATITUDE → la latitude du lieu (ex : 43.676 pour Arles), * LONGITUDE → la longitude du lieu (ex : 4.630 pour Arles). ====URL de l'API==== url = f"https://api.openweathermap.org/data/2.5/weather?lat={latitude}&lon={longitude}&appid={api_key}&units=metric&lang=fr" On construit dynamiquement l’adresse de l’API avec les bonnes informations : * **lat** et **lon** pour la géolocalisation, * **appid** pour inclure la clé d’accès API, * **units=metric** pour avoir les données en °C et hPa, * **lang=fr** pour avoir les descriptions météo en français (utile si on affiche d'autres infos comme la description du ciel). ====Bloc try/except==== ### Le mot-clé try signifie : essaie d’exécuter les instructions suivantes. Cela permet d’éviter les **plantages du script** si une erreur survient (ex : pas de connexion Internet, clé API invalide…). ### try: .... code de la fonction .... except: .... code en cas d'échec de la fonction .... ====Réponse de l'API==== ===Appel de l'API=== ### On utilise la bibliothèque requests pour envoyer une requête HTTP vers l’URL de l’API OpenWeather. ### response = requests.get(url) ===Conversion de la réponse en JSON=== ### La méthode .json() transforme la réponse en **dictionnaire Python**. Cela nous permet de manipuler facilement les informations retournées par l’API. ### data = response.json() __Exemple d'une structure JSON__ : { "main": { "temp": 18.5, "pressure": 1013, "humidity": 82 } } ===Récupération de la pression atmosphérique=== pression = data["main"]["pressure"] ### Ici, on accède à la **donnée "pressure"** qui se trouve dans la **clé "main"** du dictionnaire. C’est cette valeur (en hPa) que l’on souhaite récupérer. ### ===Retour de la fonction=== return pression On **retourne la valeur de la pression**. Cela signifie que lorsque cette fonction est appelée, elle renverra un nombre (par exemple 1013). ===Gestion des erreurs=== except: return None ### Si quelque chose ne fonctionne pas (problème de réseau, mauvaise clé API, réponse inattendue, etc.), on retourne None. ### ====Affichage des données==== pression = recuperer_pression(API_KEY, LATITUDE, LONGITUDE) ### On utilise ici la fonction //recuperer_pression// (définie plus haut) pour **obtenir la pression atmosphérique actuelle** à partir des coordonnées géographiques (latitude et longitude) et de la clé API. Le résultat (la pression en hPa) est **stocké dans la variable pression**. ### if pression is not None: -> if humidity is not None and temperature is not None and pression is not None: ### On s’assure que la récupération des données a bien fonctionné. Si la valeur n’est pas None, cela veut dire que l’appel à l’API a réussi, donc on peut afficher la donnée. Sinon, on ne fait rien (ou on pourrait afficher un message d’erreur pour informer l’utilisateur). ### print(f"{CYAN}Pression atmosphérique:{RESET} {pression} hPa") ### On affiche la pression, en couleur cyan, grâce aux **constantes ANSI** définies auparavant (**CYAN et RESET**). La valeur est suivie de l’**unité hPa (hectopascals)**, utilisée en météorologie pour mesurer la pression atmosphérique. ### ---- Suite vers [[jardin_fonction_round|Utilisation de la fonction round()]]