Récupérer la liste des prochains bus dans Navitia en PHP

Navitia est un système qui permet de connaitre tout se qu’il y a à savoir sur les transports en commun en temps réel dans plusieurs villes de plusieurs pays.

Pour ma part, j’ai déjà testé avec Paris (fr-idf) et Toulouse (fr-sw), ces deux villes sont couvertes. Contrairement à Lyon (fr-se), qui après quelques minutes de test ne me semble pas couverte.

Pour faire une requête à l’API Navitia, il faut se créer un compte (gratuit) sur leur site (navitia.io) et récupérer le token pour le mettre dans l’adresse à chaque requête (avant @api.navitia.io).

Le code de l’exemple ci dessous va effectuer une requête cURL en PHP sur l’API Navitia et retourner une chaine en JSON avec la liste des 5 prochains bus au départ (de la station ROUGET DE LISLE à Paris).

 
$i = 0;
$token = monToken;
$url = "https://".$token."@api.navitia.io/v1/coverage/fr-idf/stop_areas/stop_area%3AOIF%3ASA%3A4%3A52/commercial_modes/commercial_mode%3Abus/departures?count=5";

// Initiate curl
$ch = curl_init();

// Disable SSL verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

// Will return the response, if false it print the response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Set the url
curl_setopt($ch, CURLOPT_URL,$url);

// Execute
$retourApi=curl_exec($ch);

// Closing
curl_close($ch);

$retourApi = json_decode($retourApi, true);

while ($retourApi["departures"][$i]){

  $date = new DateTime($retourApi["departures"][$i]["stop_date_time"]["departure_date_time"]);
  $retourjson["bus"][$i]["heure"]     = $date->format("H:i");
  $retourjson["bus"][$i]["direction"] = $retourApi["departures"][$i]["display_informations"]["direction"];
  $retourjson["bus"][$i]["color"]     = $retourApi["departures"][$i]["display_informations"]["color"];
  $retourjson["bus"][$i]["textcolor"] = $retourApi["departures"][$i]["display_informations"]["text_color"];
  $retourjson["bus"][$i]["ligne"]     = $retourApi["departures"][$i]["display_informations"]["label"];
  $i++;
}

header('Content-Type: application/json;');
echo json_encode($retourjson, JSON_UNESCAPED_UNICODE); 

Voici donc le retour de ce code :

"bus": [{
            "heure": "23:34",
            "direction": "AEROPORT D'ORLY-TERMINAL SUD (Paray-Vieille-Poste)",
            "color": "ed1b2a",
            "textcolor": "ffffff",
            "ligne": "183"
        }, {
            "heure": "23:34",
            "direction": "Choisy-le-roi Gare RER (Choisy-le-Roi)",
            "color": "FF8000",
            "textcolor": "000000",
            "ligne": "03"
        }, {
            "heure": "23:35",
            "direction": "LA CROIX DE BERNY-RER (Antony)",
            "color": "216EB4",
            "textcolor": "FFFFFF",
            "ligne": "TVM"
        }, {
            "heure": "23:36",
            "direction": "CARREFOUR DE LA RESISTANCE (Thiais)",
            "color": "89C7D6",
            "textcolor": "000000",
            "ligne": "393"
        }, {
            "heure": "23:36",
            "direction": "MARCHE INTERNATIONAL DE RUNGIS (Chevilly-Larue)",
            "color": "f68f4b",
            "textcolor": "000000",
            "ligne": "103"
        }

Ici, la valeur color est la couleur de la ligne. Pour prendre un exemple concret, pour la ligne C du RER on aura le code couleur du jaune.
textcolor est la couleur du texte à afficher (vous comprendrez avec la prochaine capture d’écran).

Voici un type de rendu possible.

Navitia a mis en place un nouvel outils pour tester/construire les urls de requête : Navitia Playground

Pour plus d’informations sur les requêtes cURL, vous pouvez consulter la doc officielle (php.net/curl) ou cet article (dewep.net/curl) qui propose plusieurs façons d’utiliser les requêtes (récupérer la source d’une page externe, envoyer une requête POST, …).

Enjoy !

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.