Utilisation d`une API Web : Prévisions météo avec OpenWeatherMap

publicité
2017/05/26 02:41
1/5
Utilisation d'une API Web : Prévisions météo avec OpenWeatherMap
Utilisation d'une API Web : Prévisions météo
avec OpenWeatherMap
Api Web avec OpenWeatherMap (Solution)
Prérequis
Consulter : Python et les Apis Web
ou à défaut le contenu du cours, dans la partie Programmation Réseau du poly.
Pour la partie serveur : Utiliser Bottle pour faire un serveur Web en Python
prendre connaissance de la valeur de la clé API (voir Updago)
À la fin du TP , vous devez rendre un rapport au format PDF, ainsi que 2 fichiers Python (nommés
comme indiqué dans le sujet).
Depuis 2015, utiliser openweathermap nécessite de s'enregistrer. On s'authentifie ensuite en
utilisant une clé. Chaque requête doit sonc être complétée par : &appid=XXXXX où XXX est la
valeur de la clé à utiliser. Cette clé est disponible sur Updago.
Nous allons utiliser le service OpenWeatherMap pour récolter des prévisions météo. Ces prévisions
pourront être resservies par un site Web, par exemple.
Le site http://openweathermap.org propose une API pour récolter les informations qu'il diffuse.
Prendre connaissance des possibilités de l'API
La page de documentation de l'API est accessible ici : http://openweathermap.org/api
Voici quelques exemples :
http://api.openweathermap.org/data/2.5/weather?q=Poitiers,fr&appid=XXX
Remplacez XXX par la clé API. DAns la suite, pensez à ajouter le champ appid=XXX.
La commande weather employée ici indique que nous souhaitons obtenir les conditions météo
actuelles.
Informatique, Programmation, Python, Enseignement... - https://deptinfo-ensip.univ-poitiers.fr/ENS/doku/
Last update: 2017/04/04 17:16
tp:reseaux:api02 https://deptinfo-ensip.univ-poitiers.fr/ENS/doku/doku.php/tp:reseaux:api02
Le résultat est par défaut fourni au format json. Dans le cas de la commande weather, voici les
informations qui sont obtenues : Weather Data
Il y a bien sûr d'autres commandes disponibles, qu'on trouvera dans la documentation. Notez en
particulier la commande forecast qui permet d'obtenir des prévisions.
Outils Python
Accès à l'API
Comme indiqué dans le cours, nous allons utiliser Python pour interroger openweathermap. Le
module requests sera utilisé à la place d'urllib :
import requests
r =
requests.get("http://api.openweathermap.org/data/2.5/weather?q=Poitiers,fr")
data=r.json()
print(data)
Affichage pour débuguer
Le module json permet d'afficher de manière lisible des données au format json :
import json
# supposons que obj soit un objet au format json
print(json.dumps(obj,indent=2))
...
Une fois les données transformées en dictionnaire (data = r.json()), le dictionnaire peut être
affiché proprement avec le module pprint :
from pprint import pprint
pprint(data)
Gestion des dates
Le module datetime, qui doit être installé sur vos machines permet de manipuler les dates et les
heures. En particulier, il permet de convertir un timestamp en date :
import datetime
ts = 1402484400
print(datetime.datetime.fromtimestamp(ts))
Toujour dans le module datetime, la méthode datetime.datetime.now() renvoie la date (et
l'heure actuelle). On peut aussi construire une date comme ceci :
https://deptinfo-ensip.univ-poitiers.fr/ENS/doku/
Printed on 2017/05/26 02:41
2017/05/26 02:41
3/5
Utilisation d'une API Web : Prévisions météo avec OpenWeatherMap
d = datetime.datetime(year=2014, month=6,day=10, hour=11, minute=20)
Une date, obtenue ainsi ou avec now() peut être transformée en timestamp :
print(d.timestamp())
Serveur Web
Le serveur Web (voir plus loin) sera réalisé avec Bottle. D'éventuels graphiques peuvent être intégrés
avec highcharts, mais tout autre moyen (utilisation d'un service en ligne ?) peut être envisagé.
Travail à faire
Prenez connaissance de la documentation et faites tous les tests proposés ci-dessus.
Pour tous
Écrivez un programme Python qui, si on le lance, affiche les prévisions pour le lendemain. La prévision
devra être correctement formatée et contenir au moins des indications de température, d'humidité,
ainsi que la date. Par exemple :
Poitiers
Prévision pour le 12/06/2014
Témpératures de 18.7°C à 27.8 °C
Humidité 70%
Prévision : heavy intensity rain
Dans votre rapport, mettez une copie d'écran obtenue à l'exécution du programme. Rendez le
fichier python obtenu (appelez le simplement meteo.py)
En groupe
Le travail suivant est réalisé par 2 personnes. L'une s'occupe de récupérer les informations sur
openweathermap : on l'appelle A. L'autre crée un service Web pour servir ces informations : on
l'appelle B Dans toute la suite, mettez-vous d'accord très précisément sur ce que renvoient les
fonctions écrites par A, de manière à ce que A et B puissent avancer en même temps.
B commencera donc directement la réalisation du serveur Web (dernière question). A réalisera les
fonctions suivantes et fournira au fur et à mesure des modification son fichier à B qui réalise le
Informatique, Programmation, Python, Enseignement... - https://deptinfo-ensip.univ-poitiers.fr/ENS/doku/
Last update: 2017/04/04 17:16
tp:reseaux:api02 https://deptinfo-ensip.univ-poitiers.fr/ENS/doku/doku.php/tp:reseaux:api02
serveur Web. En commentaire de chaque fonction, donnez l'URL de la page de doc de l'API que vous
avez consulté Ajoutez vos autres sources de documentation s'il y a lieu.
Si vous n'avez pas la possibilité d'obtenir des copies d'écran de l'application finale, faites des copies
d'écran des tests que vous avez réalisé pour vérifier le bon fonctionnement de votre partie.
Si vous êtes A vous rendrez un fichier nommé gr_meteo.py contenant uniquement votre travail. Si
vous êtes B, vous rendrez un fichier meteoweb.py contenant votre travail et qui normalement, doit
importer un fichier nommé gr_meteo.py…
Programmeur **A**
Écrivez une fonction qui renvoie la pression (en millibars), la vitesse du vent (en km/h), la
température (en °C) actuelles (sous forme d'un tuple)
Il est possible de consulter un historique des relevés météo (un par heure). Écrivez une fonction qui
renvoie un relevé des k derniers jours (vous pourrez choisir la valeur de k). Le relevé pourra être celui
de température, de pression, ou d'humidité. Factorisez le code au maximum.
Openweathermap sert aussi des tuiles (morceaux de cartes) permettant de construire des cartes de
temparature, de précipitations etc… On obtient ces tuiles de la même manière que les tuiles
OpenStreetMap. Au niveau de zoom 5, la France est couverte par 5 tuiles de 256×256:
SERVER/5/15/10.png
SERVER/5/16/10.png
SERVER/5/15/11.png
SERVER/5/16/11.png
Si SERVER = http://a.tile.openstreetmap.org, on obtient les cartes géographiques openstreetmap, et
si SERVER = http://a.tile.openweathermap.org/map/temp, on obtient la cartes des températures.
En utilisant requests (r = requests.get(…)), on obtient dans r.content les données binaires
récupérées (image). Ces données peuvent être utilisées pour obtenir ensuite l'image sous une forme
ou une autre (c'est par exemple possible avec le module imageio). Les moyens à disposition pour
gérer les images sont disponibles ici : Travailler avec des images en Python
Attention à l'usage que vous faites du serveur de tuiles OpenStreetmap :
http://wiki.openstreetmap.org/wiki/Tile_usage_policy. Vous pouvez éventuellement utiliser un
serveur alternatif.
Programmeur **B**
Intégrez le tout dans une page Web servie par bottle. L'utilisateur pourra entrer le nom d'une ville et
on lui affichera l'intégralité des informations récupérées ci-dessus.
https://deptinfo-ensip.univ-poitiers.fr/ENS/doku/
Printed on 2017/05/26 02:41
2017/05/26 02:41
5/5
Utilisation d'une API Web : Prévisions météo avec OpenWeatherMap
Statistiques météo
À partir d'une latitude et d'une longitude, vous pouvez réaliser des statistiques indiquant, par mois, la
pluviométrie moyenne de chaque mois (sur les 5 dernières années par exemple). Réalisez un service
Web qui automatise cette tâche.
From:
https://deptinfo-ensip.univ-poitiers.fr/ENS/doku/ - Informatique, Programmation,
Python, Enseignement...
Permanent link:
https://deptinfo-ensip.univ-poitiers.fr/ENS/doku/doku.php/tp:reseaux:api02
Last update: 2017/04/04 17:16
Informatique, Programmation, Python, Enseignement... - https://deptinfo-ensip.univ-poitiers.fr/ENS/doku/
Téléchargement