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.