API temps réel Transilien

Cette API, publiée depuis plusieurs années, donne accès aux prochains départs d'une gare du réseau SNCF Transilien. Elle possède deux ressources : prochains départs d’une gare, prochains départs d’une gare desservant une autre gare sans changement.

L'utilisation de cette API nécessite des identifiants d'accès (demande à faire depuis la page de l'API).

 

Prochains départs d’une gare

Appel de l'API

Le nombre d'appels est limité à 20 appels/minutes et se fait via l'url suivante :

http://api.transilien.com/gare/{depart}/depart/

La variable {depart} est obligatoire et correspond au code UIC de la gare pour laquelle on souhaite consulter les prochains départs. Le code UIC est le code de la gare, selon la nomenclature de l'Union Internationale des Chemin de fer. Bien entendu, le code UIC doit être valide, sinon, l'appel provoquera une erreur !

La liste des codes UIC est accessible dans la documentation officielle de cette API. Elle est également disponible à travers différents jeux de données de l'Open Data SNCF :

La ressource la plus adaptée est "Gares et points d'arrêt du réseau Transilien" car elle donne accès :

  • au code UIC (celui qui nous intéresse)
  • au code UIC7 (code UIC sur 7 caractères)
  • aux coordonnées GPS (WGS84)

Le code UIC7 est très intéressant car c'est celui utilisé dans la ressource "Horaires théoriques des lignes Transilien" (donnée stop_id du fichier stops.txt) ... J'y reviendrai certainement dans un autre billet.

 

Exemple d'appel de l'API pour la gare d'Herblay :

http://api.transilien.com/gare/87381889/depart/

Tel quel, il vous sera demandé vos identifiants d'accès.

Pour une intégration en PHP, nous pouvons utiliser la fonction file_get_contents :

$codeUIC = "87381889";
$APIuser = "mon_login";
$APIpasswd = "mon_mot_de_passe";

$url="http://api.transilien.com/gare/".$codeUIC."/depart/";
$context = stream_context_create(array(
    'http' => array(
        'header' => "Authorization: Basic " . base64_encode($APIuser.":".$APIpasswd) . "\r\n" .
                    "Accept: application/vnd.sncf.transilien.od.depart+xml;vers=1" . "\r\n" .
                    "Host: api.transilien.com" 
    )
));


$response = file_get_contents($url, false, $context);

 

Nous pouvons également utiliser les fonctions cURL

$codeUIC = "87381889";
$APIuser = "mon_login";
$APIpasswd = "mon_mot_de_passe";

$url="http://api.transilien.com/gare/".$codeUIC."/depart/";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, $APIuser . ':' . $APIpasswd );
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

if( $info['http_code'] == 200 ) {
    $responseXML = simplexml_load_string($output);
}

Réponse

Actuellement, seule une réponse au format XML est renvoyé. Le service renverra au maximum 30 résultats, encodés en UTF-8. Le schéma XSD de la réponse est décrit dans la documentation de cette API.

Globalement, la chaine XML renvoyée est constituée de noeuds train comprenant chacun différents éléments :

  • date : date du passage du train dans la gare au format jj/mm/aaaa hh:mm. Cet élément possède un attribut : mode. Il prend les valeurs suivantes :
    • R : horaire réel de passage
    • T : horaire théorique de passage
  • num : numéro du train
  • miss : code mission du train
  • term : code UIC du terminus.
  • etat : état remarquable concernant le train. Cet élément est optionnel, il n'apparait que s'il existe un état remarquable, et peut prendre les valeurs suivantes :
    • Retardé
    • Retardé au départ
    • Supprimé

Réponse de l'appel de l'API pour la gare d'Herblay :

<?xml version="1.0" encoding="UTF-8"?>
<passages gare="87381889">
<train><date mode="R">18/04/2017 12:53</date>
<num>131071</num>
<miss>YOLA</miss>
<term>87381152</term>
</train>
<train><date mode="R">18/04/2017 13:04</date>
<num>137064</num>
<miss>POCA</miss>
<term>87384008</term>
<etat>Retardé</etat>
</train>
<train><date mode="R">18/04/2017 13:08</date>
<num>136873</num>
<miss>MOCA</miss>
<term>87381509</term>
</train>
<train><date mode="R">18/04/2017 13:14</date>
<num>136870</num>
<miss>PUCA</miss>
<term>87384008</term>
</train>
<train><date mode="R">18/04/2017 13:22</date>
<num>131073</num>
<miss>YOLA</miss>
<term>87381152</term>
</train>

...

</passages>

Pour une intégration en PHP, nous pouvons facilement traiter la réponse avec la fonction simplexml_load_string :

$response = @file_get_contents($url, false, $context);
$responseXML = simplexml_load_string($response);

 

Prochains départs d’une gare desservant une autre gare sans changement

Le fonctionnement de cette ressource est superposable à la précédente :

  • un appel via l'url de l'API
  • une réponse renvoyée au format XML

Appel de l'API

http://api.transilien.com/gare/{depart}/depart/{arrivee}/

Le paramètre {depart} correspond au code UIC de la gare pour laquelle on souhaite consulter les prochains départs. Le paramètre {arrivee} correspond au code UIC de la gare de destination et permet de filtrer les résultats pour ne renvoyer que les trains qui desservent la gare d'arrivée demandée.

Exemple d'appel de l'API pour rechercher les prochains trains au départ de la gare d'Herblay (87381889) vers la gare de Paris Saint Lazare (87384008) :

http://api.transilien.com/gare/87381889/depart/87384008/
$codeUIC1 = "87381889";
$codeUIC2 = "87384008";
$APIuser = "mon_login";
$APIpasswd = "mon_mot_de_passe";

$url="http://api.transilien.com/gare/".$codeUIC1."/depart/".$codeUIC2."/";
$context = stream_context_create(array(
    'http' => array(
        'header' => "Authorization: Basic " . base64_encode($APIuser.":".$APIpasswd) . "\r\n" .
                    "Accept: application/vnd.sncf.transilien.od.depart+xml;vers=1" . "\r\n" .
                    "Host: api.transilien.com" 
    )
));


$response = file_get_contents($url, false, $context);
$responseXML = simplexml_load_string($response);

Réponse

Le schéma de la réponse est identique à la première ressource.