Extraire des données d’une API avec JSON
Lorsque vous interagissez avec des APIs RESTful, les données sont souvent renvoyées au format JSON (JavaScript Object Notation). Ce format léger et lisible est largement utilisé pour l’échange de données entre un client et un serveur. En Python, la bibliothèque Requests facilite l’extraction de données JSON depuis une API.
Fonctions :
-
Effectuer une requête à l'API et obtenir les données JSON
Pour extraire des données depuis une API qui retourne des informations en format JSON, il faut envoyer une requête HTTP (généralement de type GET) et parser la réponse sous forme de JSON à l'aide de la méthode .json().
Exemple de code :
import requests # URL de l'API (utilisation d'une API publique d'exemple) url = 'https://jsonplaceholder.typicode.com/posts/1' # Faire une requête GET à l'API response = requests.get(url) # Vérifier si la requête a réussi (code HTTP 200) if response.status_code == 200: # Extraire les données JSON de la réponse data = response.json() # Afficher les données récupérées print("Données récupérées :", data) else: print(f"Erreur {response.status_code}")
Explication du code :
URL de l'API
url = 'https://jsonplaceholder.typicode.com/posts/1'
définit l'URL de l'API publique utilisée dans cet exemple, qui renvoie un objet JSON représentant un post spécifique.Faire une requête GET à l'API
response = requests.get(url)
envoie une requête HTTP GET à l'API à l'URL spécifiée, et reçoit la réponse dans la variableresponse
.Vérifier si la requête a réussi
if response.status_code == 200:
vérifie si le code de statut HTTP de la réponse est égal à 200, ce qui signifie que la requête a réussi.Extraction des données JSON
data = response.json()
extrait les données au format JSON de la réponse de l'API, et les assigne à la variabledata
.Afficher les données récupérées
print("Données récupérées :", data)
affiche les données JSON extraites avec le message "Données récupérées :", permettant de visualiser les informations récupérées de l'API.Gestion des erreurs
else:
si le code de statut de la réponse n'est pas 200, une erreur s'affiche.print(f"Erreur {response.status_code}")
affiche un message d'erreur contenant le code de statut HTTP si la requête échoue. -
Accéder à des données spécifiques dans la réponse JSON
Les données retournées par l'API sont souvent structurées sous forme de dictionnaires imbriqués ou de listes. Vous pouvez accéder aux éléments spécifiques de la réponse JSON en utilisant les clés ou les indices appropriés.
Exemple de code :
import requests # URL de l'API url = 'https://api.example.com/data' # Faire une requête GET à l'API response = requests.get(url) # Vérifier si la requête a réussi (code HTTP 200) if response.status_code == 200: # Extraire les données JSON de la réponse data = response.json() # Accéder à des éléments spécifiques dans les données JSON # Supposons que 'data' contient une liste sous la clé 'results' results = data.get('results', []) # Afficher les premiers résultats for item in results[:5]: # Afficher les 5 premiers éléments print(item) else: print(f"Erreur {response.status_code}")
Explication du code :
- Accès aux résultats : Supposons que la réponse JSON contient une clé
results
qui contient une liste d'objets. Utilisez la méthode.get()
pour obtenir cette liste (si elle existe). - Parcours des données : Vous pouvez parcourir la liste des résultats pour accéder aux éléments individuels et les afficher.
- Accès aux résultats : Supposons que la réponse JSON contient une clé
-
Gestion des erreurs et des exceptions
Lors de l'extraction de données d'une API, il est important de gérer les erreurs, comme les problèmes de connexion, les mauvaises réponses ou les erreurs HTTP.
Exemple de code :
import requests # URL de l'API url = 'https://api.example.com/data' try: # Faire une requête GET à l'API response = requests.get(url) # Vérifier si la requête a réussi response.raise_for_status() # Déclenche une exception pour les codes d'erreur HTTP # Extraire les données JSON de la réponse data = response.json() # Afficher les données print(data) except requests.exceptions.HTTPError as errh: print(f"Erreur HTTP: {errh}") except requests.exceptions.ConnectionError as errc: print(f"Erreur de connexion: {errc}") except requests.exceptions.Timeout as errt: print(f"Délai d'attente dépassé: {errt}") except requests.exceptions.RequestException as err: print(f"Erreur générale: {err}")
Explication du code :
- Gestion des erreurs : Les erreurs peuvent être causées par des problèmes de réseau, des erreurs HTTP (codes d'état comme 404 ou 500), ou d'autres exceptions. La méthode
raise_for_status()
permet de détecter des erreurs HTTP et de les déclencher comme exceptions. - Gestion des exceptions : Différentes exceptions sont capturées pour gérer spécifiquement les erreurs liées à la connexion, les délais d'attente, ou d'autres problèmes généraux.
- Gestion des erreurs : Les erreurs peuvent être causées par des problèmes de réseau, des erreurs HTTP (codes d'état comme 404 ou 500), ou d'autres exceptions. La méthode
-
Post-traitement des données JSON
Une fois que vous avez extrait les données JSON, vous pouvez les transformer pour les utiliser, par exemple en les convertissant en un format plus exploitable (comme une liste ou un DataFrame si vous travaillez avec des outils comme Pandas).
Exemple de code :
import requests import pandas as pd # URL de l'API url = 'https://api.example.com/data' # Faire une requête GET à l'API response = requests.get(url) # Vérifier si la requête a réussi (code HTTP 200) if response.status_code == 200: # Extraire les données JSON de la réponse data = response.json() # Si les données sont sous forme de liste, vous pouvez les convertir en DataFrame df = pd.DataFrame(data['results']) # Supposons que les données sont sous la clé 'results' # Afficher les 5 premières lignes du DataFrame print(df.head()) else: print(f"Erreur {response.status_code}")
Explication du code :
- Conversion en DataFrame : Si les données sont sous forme de liste dans le JSON, vous pouvez les convertir en un DataFrame Pandas pour faciliter l'analyse et la manipulation des données.
- Affichage des données : Le DataFrame est ensuite affiché pour examiner les premières lignes.