Skip to main content

SIRI-lite

SIRI-lite

Dhrions Version 0.5.0, 12/08/2026

Outil Python pour interroger des API de transport en commun compatibles SIRI-lite

Documentation · Issues

⚡ TL;DR

  • 🚌 Interroge des API de transport en commun compatibles SIRI-lite pour les prochains passages et le temps restant avant arrivée
  • 🎯 Pour qui : usage personnel, intégrations (ex. Home Assistant)
  • 🚀 siri-lite stop-monitoring --service CTS --stop-code 43A --token YOUR_TOKEN --print

Le projet fournit :

  • 🖥️ une CLI (ligne de commande),
  • 🌐 une interface web minimale (Flask),
  • 🔗 une base solide pour des intégrations (ex. Home Assistant).

📋 Table des matières


✨ Fonctionnalités principales

  • ⏱️ Récupération du temps restant avant l'arrivée d'un véhicule à un arrêt
  • 🚌 Support de plusieurs réseaux (ex. CTS, PRIM / Île-de-France Mobilités)
  • 📤 Sortie console, fichier JSON ou intégration applicative
  • 📦 Exécution locale ou via Docker
  • 📚 Documentation complète générée avec Antora

🚀 Installation rapide

Environnement Python

python3 -m venv venv
source venv/bin/activate
pip install -e ".[dev]"

Configuration

Copier .env.example vers .env (fichier réellement ignoré par git, contrairement à .env.example qui n'est qu'un gabarit) et y renseigner les paramètres du service utilisé :

CTS_BASE_API_URL=https://api.cts-strasbourg.eu/
CTS_AUTH_METH=Basic Auth
PRIM_BASE_API_URL=https://prim.iledefrance-mobilites.fr/
PRIM_AUTH_METH=apiKey
STOP_MONITORING_ENDPOINT=siri/2.0/stop-monitoring?MonitoringRef=

Ces mêmes valeurs peuvent aussi être fournies via services.conf, résolu en suivant la spec XDG Base Directory (--config, puis $XDG_CONFIG_HOME/siri-lite/, puis ~/.siri-lite/, puis le répertoire courant) — voir la documentation Antora pour le détail. Les tokens, eux, ne doivent jamais être commités ; ils se passent via --token (CLI) ou {SERVICE}_TOKEN (interface web, ex. CTS_TOKEN ou PRIM_TOKEN selon le paramètre ?service=).


💻 Utilisation (CLI)

Exemple avec le service CTS :

siri-lite stop-monitoring \
  --service CTS \
  --stop-code 43A \
  --token YOUR_TOKEN \
  --print

Exemple avec PRIM :

siri-lite stop-monitoring \
  --service PRIM \
  --stop-code STIF%3AStopPoint%3AQ%3A473921%3A \
  --token YOUR_TOKEN \
  --print

Options

Option Description
--service Réseau de transport (CTS ou PRIM)
--stop-code Code de l'arrêt à interroger
--token Token d'authentification de l'API
--print Affiche le résultat sur la sortie standard
--unit Unité du temps restant (minutes ou seconds, défaut minutes)
-c, --count Nombre de prochains passages à afficher (défaut 1 : un entier ; au-delà, une liste)
--format Forme de la sortie : minutes (temps restants seuls, défaut) ou json (détail par passage : ligne, destination, sens)
--resolve-lines Avec --format json, complète les published_line_name vides avec le nom court de ligne (13, 58…) résolu depuis le référentiel ouvert IDFM (mis en cache localement)
-o, --output Écrit le résultat au format JSON dans le fichier indiqué
--config Chemin explicite vers services.conf (voir section Configuration ci-dessus)
-d, --debug Active les logs de debug

Recherche d'arrêts PRIM

# Backend static (défaut) : sans token, métadonnées seulement
siri-lite stops-discovery "Châtelet" --print

# Backend icar (recommandé) : token requis, MonitoringRef candidat
siri-lite stops-discovery "Châtelet" --backend icar --token "$PRIM_TOKEN" --print
Option Description
QUERY Nom d'arrêt à rechercher (sous-chaîne, insensible à la casse/accents)
--backend static (défaut, sans token) ou icar (référentiel ICAR, --token requis)
--token Token PRIM, requis pour --backend icar
--print Affiche le résultat sur la sortie standard
-l, --limit Nombre maximal d'arrêts affichés (défaut 10)
--refresh Force le retéléchargement du jeu de données (sinon mis en cache)
--cache Chemin explicite du fichier de cache (défaut : $XDG_CACHE_HOME/siri-lite/)
-o, --output Écrit le résultat au format JSON dans le fichier indiqué
-d, --debug Active les logs de debug

⚠️ Le backend static aide à retrouver un arrêt PRIM (nom, commune, lignes) sans code garanti utilisable avec stop-monitoring. Le backend icar affiche un MonitoringRef candidat (même espace d'identifiants que SIRI, vérifié empiriquement), mais son premier appel télécharge ~120 Mo (~30 s, pas de recherche par nom côté API ICAR). Voir la documentation Antora (PRIM → Arrêts) pour le détail.


📦 Utilisation avec Docker

docker build -t siri-lite .
docker run --env-file .env siri-lite stop-monitoring \
  --service CTS \
  --stop-code 43A \
  --token YOUR_TOKEN

🧪 Tests

# Tous les tests
pytest tests/

# Un fichier spécifique
pytest tests/test_models.py

# Avec couverture
coverage run -m pytest tests/ && coverage report

🏗️ Architecture

Structure plate et simple :

src/siri_lite/
├── cli.py             # Commandes CLI (Click)
├── web.py             # Interface web (Flask)
├── services.py        # Logique métier
├── siri_client.py     # Client API SIRI + parsing
├── models.py          # Modèles de données (DTOs)
├── http_client.py     # Client HTTP générique (requests, + aiohttp pour le stop-monitoring)
├── config.py          # Chargement configuration
├── main.py            # Point d'entrée
└── logging_config.py  # Configuration du logging

Chemin async (stop-monitoring uniquement)

APIRequest/SiriClient exposent, en plus de leurs méthodes synchrones existantes (requests), un chemin async équivalent basé sur aiohttp : APIRequest.async_get_response(session) et SiriClient.async_fetch_next_calls(session) / async_fetch_next_call(session). Ce chemin :

  • reste limité au stop-monitoring (les autres appels réseau — découverte d'arrêts, résolution de nom de ligne — restent synchrones, requests uniquement) ;
  • attend une aiohttp.ClientSession fournie par l'appelant (ex. async_get_clientsession(hass) côté Home Assistant) — la lib n'en crée ni n'en ferme aucune ; lève aiohttp.ClientError (pas requests.exceptions.RequestException, propre à ce chemin).
async with aiohttp.ClientSession() as session:
    client = SiriClient(url=url, headers=headers, auth=auth)
    calls = await client.async_fetch_next_calls(session)

📚 Documentation complète

La documentation détaillée (architecture, services supportés, exemples, intégration Home Assistant, etc.) est disponible via Antora :

antora antora-playbook.yml

Sources de la documentation : docs/


⚠️ Sécurité

  • Les fichiers .env et .secrets ne doivent jamais être versionnés
  • Les tokens visibles dans l'historique doivent être considérés comme compromis et régénérés

📄 Licence

Projet personnel – licence à définir.

Metadata

Release files for siri-lite 0.14.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for siri-lite 0.14.0
File Size Uploaded
siri_lite-0.14.0.tar.gz 24.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for siri-lite 0.14.0
File Interpreter ABI Platform
siri_lite-0.14.0-py3-none-any.whl Python 3 none any Details

Total release size: 50.0 kB

Release files / siri_lite-0.14.0.tar.gz

Download URL siri_lite-0.14.0.tar.gz
Size 24.8 kB
Tags Source
SHA-256 checksum
How to use checksums
1c12ddd4021c9c6974a68036411e57f6116d3a8e9c04152ae4549ed8c4c39e46
BLAKE2b-256 checksum
How to use checksums
dc247eb500999863ee14be25efe7ec6b9a073fec18c7819ef43059a1bfd38b63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / siri_lite-0.14.0-py3-none-any.whl

Download URL siri_lite-0.14.0-py3-none-any.whl
Size 25.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f0faddec934419289ea09af84b6acd0c1d88ff730b42ecfb6da3c7e474cac04d
BLAKE2b-256 checksum
How to use checksums
104f7463f7f7351f054e852c6652e6b829d0ffa598b033f6188316813840805f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

0.14.0 This release

2 release files

0.13.0

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page