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/