Python, FastAPI, React, Vite

Rail Barometer

Contexte

Rail Barometer est un tableau des départs en temps réel pour les gares belges. Ce projet m'a permis de pratiquer une chaîne de traitement de données complète : collecte des informations via l'API officielle iRail, nettoyage et transformation en Python, puis intégration dans un front-end Vite / React.

Challenge

Les réponses brutes de l'API sont volumineuses et peu lisibles : heures exprimées en timestamps Unix, retards en secondes, informations du train dispersées dans plusieurs objets imbriqués. L'enjeu était de construire une couche intermédiaire qui ne transmet au front-end que des données propres, typées et directement affichables.

Collecte des données via l'API officielle

Un back-end FastAPI interroge le endpoint liveboard de l'API officielle iRail de manière asynchrone avec httpx. Chaque gare est exposée via une route dédiée /stations/{station}, et les erreurs réseau ou les réponses vides sont interceptées pour renvoyer une erreur HTTP explicite plutôt qu'une donnée corrompue.

Nettoyage et transformation

  • Calcul de l'heure : les timestamps Unix des départs et de la dernière mise à jour sont convertis en heures lisibles au format HH:MM.
  • Calcul du retard : les retards fournis en secondes sont ramenés en minutes, prêts à être affichés à côté de l'heure de départ.
  • Restructuration : seules les informations utiles sont conservées (destination, identifiant et type du train, quai, heure, retard) et regroupées dans une structure claire.
  • Validation par DTO : des modèles Pydantic (StationDTO, DepartureDTO, VehicleDTO) garantissent la forme des données renvoyées par l'API.

Intégration front-end sous Vite / React

  • Contrat partagé : les DTO Python sont reproduits en types TypeScript, ce qui assure la cohérence entre le back-end et l'interface.
  • Données toujours fraîches : TanStack Query gère le cache, le rafraîchissement automatique toutes les 60 secondes, l'annulation des requêtes et les nouvelles tentatives en cas d'échec.
  • Interface : une barre latérale permet de passer d'une gare à l'autre, et trois onglets affichent l'aperçu des départs, le JSON renvoyé et la structure du DTO. L'ensemble est stylisé avec Tailwind CSS.
Retour
Contact

Prenons le temps de discuter

  • Disponible
  • Charleroi, Belgique
  • AI-Augmented