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ête GET à 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.
  • 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.
  • 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.
  • 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.