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 :
- https://developers.google.com/youtube/2.0/developers_guide_json
- http://developer.vimeo.com/apis/
- https://dev.twitter.com/docs/api/1.1/overview
- http://www.reddit.com/dev/api
- http://wiki.openstreetmap.org/wiki/API_v0.6
- https://code.google.com/p/google-api-python-client/
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 #
- https://data.enedis.fr/explore/?sort=modified (enedis)
- https://public.opendatasoft.com/ (divers)
- http://fr.openfoodfacts.org/data (nourriture)
- http://fr.openbeautyfacts.org/data (produits cosmétiques)
- http://api.open-notify.org/ (station spatiale internationale)
- https://www.flickr.com/services/api/ (flicker)
- https://www.imdb.com/ BDD de films
- https://www.themoviedb.org/?language=fr BDD de films
- Site qui référence des API Web : https://www.programmableweb.com/
- https://github.com/public-apis/public-apis (grosse liste)
- https://api.gouv.fr/ API des services publics
Ressources #
- Using APIs with Python requests module
- http://c0ding.github.io/tweetuoso/
- https://github.com/sixohsix/twitter
- https://github.com/i-kiwamu/python3-oauth2
- http://www.pythonforbeginners.com/python-on-the-web/how-to-access-various-web-services-in-python/
- http://www.pythonforbeginners.com/python-on-the-web/using-requests-in-python/
- http://www.pythonforbeginners.com/code-snippets-source-code/bitly-shortener-with-python/
- http://jsonviewer.stack.hu/ ou http://jsonlint.com/
- http://test.data-sncf.com/index.php/