From 33e5dee88e0e9c54d74a214c736ca53e87ae4f5b Mon Sep 17 00:00:00 2001 From: Tipragot Date: Wed, 8 Nov 2023 11:55:02 +0100 Subject: [PATCH] Ajout exo --- Chapitre 3 - Modularité/C03_meteo.py | 98 ++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 Chapitre 3 - Modularité/C03_meteo.py diff --git a/Chapitre 3 - Modularité/C03_meteo.py b/Chapitre 3 - Modularité/C03_meteo.py new file mode 100644 index 0000000..0824b65 --- /dev/null +++ b/Chapitre 3 - Modularité/C03_meteo.py @@ -0,0 +1,98 @@ +# +# Activité 1 du chapitre 3 (p54) : Utiliser des APIs et des modules Python +# +# Accès au service OpenWeatherMap + +# Mettre ici la clé obtenue par le professeur à partir de ce lien : +# https://home.openweathermap.org/users/sign_up +# Les élèves peuvent aussi obtenir eux-même une clé (nécessite l'accès à leur mail). +cle = '0001aa32345d1df47456f64b45f8170b' + +# -------- Question 1 : Requête explicite à l'API de OpenWeatherMaps + +import requests +import json + +def requete(cle, ville): + """ Affiche les informations du site OpenWeatherMaps pour une ville """ + # Interroger le service Web OpenWeatherMap pour la ville donnée + reponse = requests.get('https://api.openweathermap.org/data/2.5/weather?q='+ville+'&appid='+cle) + # Afficher le dictionnaire obtenu : + print(json.dumps(reponse.json(), indent=4)) + +### COMPLÉTER ici par un test de la fonction ci-dessus + +# -------- Question 3 : Utilisation du module Python pyowm + +# module OpenWeatherMap à installer par la commande +# pip install pyowm +# à exécuter dans le terminal ou depuis EduPython +from pyowm.owm import OWM + +# Obtenir un accès au site authentifié par la clé +owm = OWM(cle) + +def test_api(cle, ville): + """ Afficher la météo d'une ville """ + # Obtenir l'objet 'manager' pour gérer une session avec le site OpenWeatherMaps + manager = owm.weather_manager() + # Obtenir la météo d'une ville et l'afficher + observation = manager.weather_at_place(ville) + print(observation.weather.status, observation.weather.temperature('celsius')) + +### COMPLÉTER ici par un test de la fonction ci-dessus + +# -------- Question 4 : Utilisation plus avancée +# - accès au registre des villes +# - accès aux prévisions à 8 jours + +def previsions(owm, ville, pays): + """ Retourne les prévisions météo (temps et température) d'une ville """ + # Obtenir l'accès au registre des villes + reg = owm.city_id_registry() + # Obtenir les informations sur la ou les villes de ce nom + liste = reg.locations_for(ville, pays) + if len(liste) == 0: # ville inconnue + print(ville+' inconnue !') + return ([], []) + # Extraire la latitude et longitude de la première ville de la liste + latitude = liste[0].lat + longitude = liste[0].lon + + # Obtenir l'objet 'manager' pour gérer une session avec le site OpenWeatherMap + manager = owm.weather_manager() + # Obtenir les prévisions pour les coordonnées données + previsions = manager.one_call(latitude, longitude) + + ### COMPLÉTER ici pour créer un tableau des prévisions de températures + ### et un tableau des prévisions du temps (couvert, ensoleillé, ...) + ### Ces informations sont dans le tableau previsions.forecast_daily. + ### Chaque élément de ce tableau correspond aux prévisions d'une journée. + ### Ces prévisions sont un objet qui contient deux attributs qui nous intéressent : + ### previsions.forecast_daily[i].temperature('celsius') : température en ºC + ### previsions.forecast_daily[i].status : météo sous forme de chaine de caractères + temperatures = [e.temperature('celsius') for e in previsions.forecast_daily] + meteo = [e.status for e in previsions.forecast_daily] + + # retourner les deux tableaux sous forme d'un tuple + return temperatures, meteo + +### COMPLÉTER ici pour afficher les prévisions d'au moins deux villes +### Le pays est le code sur 2 lettres du pays : +### 'FR' pour France, 'GB' pour Grande-Bretagne, etc. + +# -------- Section 2, Question 2 : Afficher les prévisions + +from matplotlib import pyplot + +### COMPLÉTER ici pour afficher les graphes des prévisions de températures. +### Utiliser la fonction `previsions` ci-dessus pour obtenir les prévisions. +### Utiliser la fonction `pyplot.plot` de la bibliothèque pyplot importée ci-dessus. +### On peut appeler `plot` plusieurs fois pour afficher plusieurs graphes +### Utiliser la fonction `pyplot.legend` pour afficher la légende avec les noms des villes. +### Utiliser la fonction `pyplot.show` pour afficher le graphe, +### ou `pyplot.savefig` pour l'enregistrer dans un fichier. + +temperatures, meteo = previsions(owm, 'Paris', 'FR') +pyplot.plot(temperatures, meteo) +pyplot.show()