tg4/Chapitre 3 - Modularité/C03_meteo.py
2023-11-08 11:55:02 +01:00

99 lines
4.1 KiB
Python

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