Tuto Apiweb

Python et les API Web #

Bon nombre de services Web proposent des API (Application Programming Interface) basées sur HTTP. C’est ce qui permet entres autres à des tiers de développer des clients pour ces services Webs (clients Twitter par exemple).

Ces APIS Web peuvent suivre l’un ou l’autre des modèles les plus communs : REST.

En règle générale, les APIs sont documentées :

Voici quelques exemples de ce qu’il est possible de faire avec Python, en utilisant le module requests pour simplifier les requêtes Web.

Récupérer des objets OpenStreetMap #

import requests
r = requests.get('http://api06.dev.openstreetmap.org/api/0.6/map?bbox=0.2,46.5,0.4,46.7')
print(r)

Accéder à un flux RSS (ici celui d’Interstices) #

Utilisation du module python-feedparser (http://pythonhosted.org/feedparser/)

import feedparser
d = feedparser.parse('https://interstices.info/feed/Rss2.jsp?id=c_13634')
print(d.feed.title)
for i in d.entries :
    print(i.title,i.published,"\n================")
    print(i.id)
    print(i.link)
    print(i.description)
    print()

Le numéro id=XXX de l’URL est susceptible de changer. Vous pouvez le trouver sur la page de garde d'Interstices

OpenWeatherMap #

Il faut avoir uné clé API (à ajouter dans l’URL) pour utiliser openweathermap.

Le site web http://openweathermap.org propose une API permettant de connaître les conditions météo sur n’importe quel point du globe. La requête GET est de la forme : http://api.openweathermap.org/data/2.5/weather?q=LIEU

Le lieu est alors un nom de ville comme Poitiers,fr. On peut aussi rechercher par coordonnées (latitude, longitude) ou identifiant de ville. La documentation est ici http://api.openweathermap.org/API/

Le résultat obtenu, au format JSON (d’autres formats sont disponibles), est de ce type :

{'base': 'gdps stations',
 'clouds': {'all': 90},
 'cod': 200,
 'coord': {'lat': 46.583328, 'lon': 0.33333},
 'dt': 1379489400,
 'id': 2986495,
 'main': {'humidity': 100,
          'pressure': 1008,
          'temp': 290.15,
          'temp_max': 290.15,
          'temp_min': 290.15},
 'name': 'Poitiers',
 'rain': {'3h': 1},
 'sys': {'country': 'FR', 'sunrise': 1379482876, 'sunset': 1379527430},
 'weather': [{'description': 'overcast clouds',
              'icon': '04d',
              'id': 804,
              'main': 'Clouds'}],
 'wind': {'deg': 240, 'speed': 6.2}}

Le dictionnaire main contient par exemple la température (en Kelvins), la pression (en hectopascals), et le taux d’humidité de l’air.

Voici un exemple de programme Python qui récupère ces données et les affiche.

import requests

url="http://api.openweathermap.org/data/2.5/weather?q=Poitiers,fr"
content=requests.get(url)
data=content.json()
t=data['main']['temp']
print("La témpérature est de {} degrés C".format(t-273.15))

On peut aussi se passer du module requests, mais le code devient moins clair :

import urllib.request as req
import json
url="http://api.openweathermap.org/data/2.5/weather?q=Poitiers,fr"
u=req.urlopen(url)
content=u.read()
jsonstr=content.decode('ascii')
data=json.loads(jsonstr)
t=data['main']['temp']
print("La témpérature est de {} degrés C".format(t-273.15))

OpenFoodFacts #

Le site http://fr.openfoodfacts.org/ recense des données sur les produits alimentaires. L’alimentation 8-) de la base est faite grâce au crowdsourcing, et les données sont librement accessibles.

On peut interroger la base à partir du code barre d’un produit : http://fr.openfoodfacts.org/api/v0/produit/3029330003533.json

Plus d’infos ici : http://fr.openfoodfacts.org/data

Sites proposant ou référençant des API #

Ressources #