Python : APIs
Sources
API : Application Programming Interface
Ou, en francais, interface programmatique. Pour le définir simplement, il s'agit d'un intermédiaire. L'API permet de faire le lien avec un système par son interface, afin d'obtenir facilement ce dont on a besoin. Nous faisons une requête, l'API interroge une application et nous apporte une réponse.
Les APIs sont utiles car elles sont facile d'accès, et permettent au système dont elle sont dépendantes d'évoluer sans que l'on ait à faire évoluer notre code.
C'est parti
Module requests
Le module Python nommé requests sert, comme son slogan l'indique ("HTTP for humans") d'effectuer simplement des requêtes HTTP.Ce module est vraiment simple d'accès, comme le montre le code suivant extrait du site :
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass')) >>> r.status_code 200 >>> r.headers['content-type'] 'application/json; charset=utf8' >>> r.encoding 'utf-8' >>> r.text u'{"type":"User"...' >>> r.json() {u'private_gists': 419, u'total_private_repos': 77, ...}
Nous allons ici utiliser ce module.
Une API simple
Nous allons ici utiliser l'API de Open Notify, qui est une API servant les données de la NASA. Cool !
Le code
#! /usr/bin/env python3 # encoding: utf-8 ###Code d'exemple, servant à apprendre les APIs. import requests #Nous commencons par un simple GET request = requests.get('http://api.open-notify.org') print(request.text) ''' Ce code nous renvoie juste le contenu de la page : en effet, nous n'aurons des objetgs précis que si nous ne demandons précisément celui-ci (le bon "end point"). La plupart du temps, nous aurons du JSON en retour (qui est toujours un bon moyen d'organiser des informations). En plus du contenu, nous avons le code de retour. ''' print(request.status_code) #200 si tout va bien :) ''' Nous pouvons facilement avoir une erreur 404. ''' request2 = requests.get("http://api.open-notify.org/nimportequoi") print(request2.status_code) ''' Un exemple pratique Open-notify nous donne plusieurs endpoints pour accéder aux données de la NASA. /iss-now.json nous permet de savoir où est l'ISS; /iss-pass.json à quel moment l'ISS passerait au-dessus de notre tête. Nous allons ici utiliser /astros.json, qui nous donne le nom des personnes actuellement dans l'espace (les veinards...). ''' astronautes = requests.get('http://api.open-notify.org/astros.json') print(astronautes.text) #On récupère nos astronautes suiviss du message "success". ''' Du JSON lisible? Le module requests possède une méthode pour décoder le JSON. On av pouvoir transformer ça en dictionnaire ! ''' astronautes_json = astronautes.json() print(astronautes_json) #On peut imprimer tout ça un peu mieux : print("\n\nNombre de personnes dans l'espace", astronautes_json['number']) for a in astronautes_json['people']: print(a['name'])