Version Python

ProcédureIP-PYTHON-API_Weather

Pré-requis

Vous avez votre clé API

Le module request est installé.

Variables - Structure conditionnelle - Fonctions - Modules

Procédure
  1. Code de base à tester
    1
    import requests
    2
    3
    url = "https://api.openweathermap.org/data/2.5/weather?q=Vittel,FR&appid=votre_key_api"
    4
    5
    response= requests.get(url)
    6
    7
    data= response.json()
    8
    print(data)
    9
    temperature= data["main"]["temp"]
    10
    print(temperature)

    AttentionVisualisation Clé API

    Pour que cela fonctionne, vous devez copier et coller votre clé API dans ce code.

    Il est généralement déconseillé de montrer votre clé API dans le code, surtout si vous partagez ce code, car quelqu'un d'autre pourrait l'utiliser à vos dépens. On utilisera des variables d'environnement pour la gérer de manière plus sécurisée  (étape à suivre)

  2. Sécuriser la clé API

    Installation du module python

    1
    pip install python-dotenv

    Code

    1
    import os
    2
    from dotenv import load_dotenv
    3
    4
    # Charger les variables d'environnement depuis le fichier .env
    5
    load_dotenv()
    6
    7
    # Récupérer la clé API à partir des variables d'environnement
    8
    api_key= os.getenv('api_OPENWEATHER')
    9
    10
    print(api_key)

    On peut bien sûr ajouter des variables avec les mots de passe WIFI, etc que l'on ne veut pas partager par erreur.

    Une fois testé, on peut modifier le code selon 2 solutions présentées ci-dessous

  3. Solution 1 : mise en place

    Code

    1
    import requests
    2
    # Clé d'API OpenWeatherMap
    3
    import os
    4
    from dotenv import load_dotenv
    5
    6
    # Charger les variables d'environnement depuis le fichier .env
    7
    load_dotenv()
    8
    9
    # Récupérer la clé API à partir des variables d'environnement
    10
    api_key= os.getenv('api_OPENWEATHER')
    11
    12
    # Assurez-vous que votre clé API a été chargée avec succès
    13
    if api_key is None:
    14
        raise ValueError("La clé API n'a pas été trouvée dans les variables d'environnement.")
    15
    16
    # URL de l'API OpenWeatherMap
    17
    url = "http://api.openweathermap.org/data/2.5/weather"
    18
    19
    # Paramètres de la requête au format JSON
    20
    params = {
    21
        "q": "Vittel,fr",
    22
        "appid": api_key,
    23
        "units": "metric"
    24
    }
    25
    26
    # Envoi de la requête
    27
    response = requests.get(url, params=params)
    28
    29
    # Vérification de la réponse
    30
    if response.status_code == 200:
    31
        # Extraction de la température
    32
        data = response.json()
    33
        temperature = data["main"]["temp"]
    34
        print(f"La température à Vittel est de {temperature} degrés Celsius.")
    35
    else:
    36
        print("Erreur lors de la requête.")
    37

    On ajoute des tests pour vérifier que tout se passe bien, et on intègre dans la requête des paramètres afin de clarifier le corps de la requête avec l'argument params qui est au format JSON[1] comme le sera la réponse du serveur.

  4. Solution 2 : la requête

    Code

    1
    # ..............code pour définir la clé API 
    2
    3
    city = 'Vittel'
    4
    country_code = 'FR'
    5
    6
    # Construction de l'URL de l'API
    7
    url = f'http://api.openweathermap.org/data/2.5/weather?q={city},{country_code}&appid={api_key}&units=metric'
    8
    9
    # Faire la requête à l'API
    10
    response = requests.get(url)
    11
    12
    # ................code après

    Remarque

    C'est une autre façon en manipulant les chaînes de caractères et le contenu des variables dans les expressions avec les {}.

    On préfèrera nettement la Solution 1 et les paramètres en JSON.

  5. Solution 3 : Structure avec Procédure

    Code du module avec une fonction lit_API avec un argument Ville

    La procédure exécute la requête, puis affiche de manière sommaire la ville, elle pourrait retourner la température, puis on pourrait gérer l'affichage plus loin.

    Code complet act_004_API_OpenWeather_TEST_03.py

    Procédure

    1
    import os
    2
    import requests
    3
    from dotenv import load_dotenv
    4
    5
    # Charger les variables d'environnement depuis le fichier .env
    6
    load_dotenv()
    7
    8
    # Récupérer la clé API à partir des variables d'environnement
    9
    API_KEY = os.getenv('api_OPENWEATHER')
    10
    11
    def lit_API(ville):
    12
        """
    13
        Cette procédure interroge l'API OpenWeather pour obtenir des données météorologiques pour une ville donnée.
    14
    15
        Args:
    16
        ville: Nom de la ville pour laquelle les données météorologiques sont demandées.
    17
        """
    18
        # URL de base de l'API OpenWeather
    19
        base_url = "https://api.openweathermap.org/data/2.5/weather"
    20
    21
        # Paramètres pour la requête API
    22
        params = {
    23
            'q': ville,
    24
            'appid': API_KEY,
    25
            'units': 'metric'  # ou 'imperial' pour Fahrenheit
    26
        }
    27
    28
        try:
    29
            # Effectuer la requête
    30
            response = requests.get(base_url, params=params)
    31
    32
            # Vérifier le code de statut de la réponse
    33
            response.raise_for_status()
    34
    35
            # Convertir la réponse en JSON
    36
            data = response.json()
    37
    38
            # Imprimer les données récupérées
    39
            print(f"Données météo pour {ville} :")
    40
            #print(data)  # Ou vous pouvez choisir d'imprimer des données spécifiques
    41
    42
            # Exemple : imprimer la température
    43
            temperature = data["main"]["temp"]
    44
            print(f"La température à {ville} est de {temperature} °C")
    45
    46
        except requests.exceptions.HTTPError as http_err:
    47
            # Gérer les erreurs HTTP que pourrait retourner OpenWeatherMap
    48
            print(f"Erreur HTTP: {http_err}")
    49
        except requests.exceptions.RequestException as e:
    50
            # Gérer les autres erreurs potentielles (réseau, etc.)
    51
            print(f"Erreur de requête: {e}")

    Appel

    1
    import act_004_API_OpenWeather_TEST_03
    2
    3
    if __name__ == "__main__":
    4
        # Utilisation de la procédure
    5
       act_004_API_OpenWeather_TEST_03.lit_API('Paris,FR')