99 lines
4.1 KiB
Python
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()
|