Accéder au contenu principal
Créer une API Météo Intelligente avec Python, IA et FastAPI

🌦️ Créer une API Météo Intelligente avec Python, IA et FastAPI

Ce projet consiste à créer une API REST moderne qui interroge un service météo en temps réel, puis applique un modèle de machine learning pour prédire la température dans les prochaines heures. Le tout est exposé via une interface web performante grâce à FastAPI.

🧠 Objectif de l'API

  • Collecter les données météo d'une ville via l'API OpenWeatherMap
  • Appliquer un modèle IA entraîné sur des données historiques
  • Exposer les résultats sous forme d’API REST

🧰 Librairies utilisées

OutilUtilisation
requestsAppels HTTP à l'API météo
pandasManipulation de données
scikit-learnModélisation de la prédiction météo
FastAPICréation de l’API REST
uvicornServeur de développement performant
pip install fastapi uvicorn requests pandas scikit-learn

📡 Récupération des données météo

Le fichier suivant interroge OpenWeatherMap avec une clé API. Le retour est simplifié pour n’extraire que les champs utiles.

import requests

API_KEY = "VOTRE_CLE_API"

def get_weather(city):
    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={API_KEY}&units=metric"
    response = requests.get(url)
    if response.status_code != 200:
        raise Exception(f"Erreur API météo : {response.status_code}")
    data = response.json()
    return {
        "city": city,
        "temperature": data["main"]["temp"],
        "humidity": data["main"]["humidity"],
        "wind": data["wind"]["speed"],
        "description": data["weather"][0]["description"]
    }

🤖 Modélisation IA avec scikit-learn

Le modèle de régression linéaire apprend à prédire la température future (dans 3h) à partir des conditions actuelles. Ce modèle est volontairement simple pour illustrer le concept.

import numpy as np
from sklearn.linear_model import LinearRegression

class WeatherPredictor:
    def __init__(self):
        self.model = LinearRegression()

    def train(self, historical_data):
        X = historical_data[["temperature", "humidity", "wind"]]
        y = historical_data["temperature_in_3h"]
        self.model.fit(X, y)

    def predict(self, current):
        features = np.array([[current["temperature"], current["humidity"], current["wind"]]])
        return self.model.predict(features)[0]

🚀 Création de l'API REST avec FastAPI

Le cœur du projet consiste à exposer un endpoint REST qui combine données météo en direct et prédiction. L’interface Swagger est automatiquement générée.

from fastapi import FastAPI
from weather_fetcher import get_weather
from ml_model import WeatherPredictor
import pandas as pd

app = FastAPI(
    title="API Météo IA",
    description="Prévisions météo avec FastAPI et scikit-learn",
    version="1.0"
)

historical = pd.DataFrame([
    {"temperature": 20, "humidity": 65, "wind": 5, "temperature_in_3h": 21.5},
    {"temperature": 25, "humidity": 55, "wind": 3, "temperature_in_3h": 26.5},
    {"temperature": 30, "humidity": 45, "wind": 2, "temperature_in_3h": 32.0},
    {"temperature": 15, "humidity": 80, "wind": 6, "temperature_in_3h": 16.5}
])

model = WeatherPredictor()
model.train(historical)

@app.get("/predict/{city}")
def predict(city: str):
    try:
        current = get_weather(city)
        predicted = model.predict(current)
        return {
            "city": city,
            "current_weather": current,
            "predicted_temperature_in_3h": round(predicted, 2)
        }
    except Exception as e:
        return {"error": str(e)}

💻 Lancement local

uvicorn main:app --reload

Accessible ensuite via l’interface interactive : http://localhost:8000/docs

🛠️ Améliorations possibles

  • Connexion à une base de données (SQLite, PostgreSQL)
  • Entraînement sur des données météo réelles
  • Sérialisation du modèle avec joblib
  • Système de cache pour éviter les appels API multiples
  • Système d’authentification JWT pour sécuriser les endpoints

📁 Structure recommandée

project/
├── main.py
├── weather_fetcher.py
├── ml_model.py
├── requirements.txt
└── data/

📌 Résumé

ComposantTechnologie utilisée
Récupération météorequests + OpenWeatherMap
Prédiction IAscikit-learn
API RESTFastAPI
Serveuruvicorn

Commentaires

Posts les plus consultés de ce blog

🔓 Peut-on vraiment "craquer" un mot de passe ? Une démonstration pas à pas 👇 Ce qu’on va faire Dans cet article, on montre concrètement comment un outil gratuit (présent dans Kali Linux) peut retrouver un mot de passe simple en quelques secondes. Mais on va aussi voir pourquoi un mot de passe complexe bloque toute attaque — et comprendre pourquoi. 🛠️ Les outils nécessaires On utilise un outil connu des experts cybersécurité : John the Ripper (inclus dans Kali Linux, utilisé pour les tests d’audit de mots de passe). John ne "pirate" pas un système en ligne. Il teste des mots de passe chiffrés en local , comme s’il avait volé un fichier de mots de passe (un hash). Cela simule ce qui se passe quand un hacker récupère une base de données de mots de passe cryptés . ✅ Étape 1 – Créer un mot de passe simple et le chiffrer On va créer un mot de passe : bonjour123 Puis on le chiffre avec cette commande : echo -n "bonjour123" | openssl passwd -...
Comprendre les Buffer Overflows - Analyse Technique 🗂️ Table des matières 🧠 Introduction 📚 Comprendre la vulnérabilité 🛠️ Compilation sans protections 🔎 Mécanisme d'exploitation 🛡️ Protections modernes 🧰 Outils à connaître 🔧 Environnement Docker 📌 Rappel sur les registres : Lorsqu'une fonction est exécutée, plusieurs registres processeur sont utilisés. Parmi eux : RIP (x86_64) : registre d'instruction, contient l'adresse de la prochaine instruction à exécuter. EIP (x86 32-bit) : équivalent de RIP sur les systèmes 32 bits. RBP / EBP : pointeur de base de la pile, souvent utilisé pour référencer les variables locales et les arguments. RSP / ESP : pointeur de sommet de la pile, toujours à jour avec l'adresse actuelle du haut de pile. Ces registres sont au cœur des méca...
Détection d'une attaque DDoS avec Snort et Kali Linux Mener une Attaque DDoS avec Kali Linux et la Détecter avec Snort Avertissement : ce tutoriel est destiné à un usage éthique et pédagogique dans un environnement de test. Toute utilisation non autorisée est interdite. 1. Objectif Simuler une attaque DDoS depuis Kali Linux et observer sa détection en temps réel par Snort. Cette approche est parfaite pour un exercice red/blue team. 2. Préparation de l'environnement Attaquant : Kali Linux Cible : Ubuntu Server avec Apache Snort IDS : sur une machine intermédiaire (interface en mode promiscuous) 3. Simulation d'une attaque DDoS 3.1 SYN Flood avec hping3 Le SYN flood sature les connexions TCP en enchaînant des paquets SYN sans finaliser le handshake. sudo hping3 -c 50000 -d 120 -S -w 64 -p 80 --flood --rand-source 192.168.1.20 3.2 HTTP Flood avec GoldenEye GoldenEye provoque un déluge de requêtes HTT...