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 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() # Afficher les données récupérées print(data) else: print(f"Erreur {response.status_code}")
Explication du code :
- URL de l'API : Vous remplacez
https://api.example.com/data
par l'URL réelle de l'API à partir de laquelle vous souhaitez extraire les données. - Requête GET : La méthode
requests.get(url)
est utilisée pour envoyer une requêteGET
à l'API. - Vérification de la réponse : Après la requête, nous vérifions si le code de statut HTTP est
200
(OK), ce qui signifie que la requête a réussi. - Extraction des données JSON : Si la requête est réussie, la méthode
.json()
permet de parser la réponse au format JSON et de la convertir en un objet Python (typiquement un dictionnaire ou une liste). - Affichage des données : Les données récupérées sont affichées.
- URL de l'API : Vous remplacez
-
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.