enr37 a écrit:salut,
je vote pour merci

Alors, pour commencer, j'ai quelque peu modifié l'affichage. La valeur retournée est un nombre décimal (temps total en minutes). Car je ne suis pas sur que les secondes aient un intérêt pour un trajet quotidien (sauf si vous vous prenez pour Sébastien Loeb, mais il faudra alors tenir compte des dixièmes de secondes

)
D'autre part, on ne gère plus les différents itinéraires possibles, car le trajet à étape multiplie des possibilités (rien de vous empêchera une fois les fesses posées sur le siège de la voiture de choisir un autre itinéraire).
J'ai également ajouté une condition, pour que le script ne termine pas son exécution si une valeur est retournée à 0 (pour la propreté des graphes, quand Waze se montre indisponible...)
Par de jugement sur la propreté ou la qualité du code, je n'avais pas remis les mains dans le PHP depuis au moins 5 ans... et je l'ai surtout modifier vite fait pour qu'il réponde à un besoin. Mais je n'ai pas soigné la forme....
Changer l'url :
http://localhost/script/?exec=wazetotal.php&start=[VAR1]&step=[VAR2]&arrival=[VAR3]
(attention au nom du fichier)
Modifier le type de données et indiquer : Nombre décimal
Unité : min
VAR1 : départ (maison ?)
VAR 2 : étape (nounou, école ?)
VAR 3 : arrivée (boulot, le bagne ?)
Donc, voici le nouveau fichier php (je l'ai appelé wazetotal.php) :
- Code : Tout sélectionner
<?php
/*************************************************************************************/
/* ### Report MAJ information trajet en voiture via Waze ### */
/* */
/* Développement par eedomusbox@gmail.com */
/* Version 1.0 */
/* Modifié en 11/2017 par jlegrand85@gmx.fr pour calculer un trajet avec 1 étape */
/*************************************************************************************/
// TRAJET 1
$depart = getArg('start');
$arrive = getArg('step');
//Découpage des coordonnées GPS
$departexp = explode('|', str_replace(',', '.', $depart));
$depart_x = $departexp[1];
$depart_y = $departexp[0];
$arriveexp = explode('|', str_replace(',', '.', $arrive));
$arrive_x = $arriveexp[1];
$arrive_y = $arriveexp[0];
$query = 'https://www.waze.com/row-RoutingManager/routingRequest?from=x%3A'.$depart_x.'+y%3A'.$depart_y.'&to=x%3A'.$arrive_x.'+y%3A'.$arrive_y.'&returnJSON=true&timeout=60000&nPaths=2&options=AVOID_TRAILS%3At%2CALLOW_UTURNS';
$jsonResponse = httpQuery($query, 'GET');
// Le JSON est trop long à parser avec les instructions, on supprime la partie qui ne nous intéresse pas
for ($i = 0; $i < 2; $i++)
{
$start = strpos($jsonResponse, '"results":[');
$end = strpos($jsonResponse, ']', $start);
$jsonResponse = substr($jsonResponse, 0, $start).substr($jsonResponse, $end+2);
}
$routeResponseJson = sdk_json_decode($jsonResponse, true);
$route1TotalTimeSec = $routeResponseJson['alternatives'][0]['response']['totalRouteTime'];
$route1TotalTimeMin = $route1TotalTimeSec/60;
$textChemin1 = round($route1TotalTimeMin);
// TRAJET 2
$depart = getArg('step');
$arrive = getArg('arrival');
//Découpage des coordonnées GPS
$departexp = explode('|', str_replace(',', '.', $depart));
$depart_x = $departexp[1];
$depart_y = $departexp[0];
$arriveexp = explode('|', str_replace(',', '.', $arrive));
$arrive_x = $arriveexp[1];
$arrive_y = $arriveexp[0];
$query = 'https://www.waze.com/row-RoutingManager/routingRequest?from=x%3A'.$depart_x.'+y%3A'.$depart_y.'&to=x%3A'.$arrive_x.'+y%3A'.$arrive_y.'&returnJSON=true&timeout=60000&nPaths=2&options=AVOID_TRAILS%3At%2CALLOW_UTURNS';
$jsonResponse = httpQuery($query, 'GET');
// Le JSON est trop long à parser avec les instructions, on supprime la partie qui ne nous intéresse pas
for ($i = 0; $i < 2; $i++)
{
$start = strpos($jsonResponse, '"results":[');
$end = strpos($jsonResponse, ']', $start);
$jsonResponse = substr($jsonResponse, 0, $start).substr($jsonResponse, $end+2);
}
$routeResponseJson = sdk_json_decode($jsonResponse, true);
$route2TotalTimeSec = $routeResponseJson['alternatives'][0]['response']['totalRouteTime'];
$route2TotalTimeMin = $route2TotalTimeSec/60;
$textChemin2 = round($route2TotalTimeMin);
// On additionne les deux trajets, si un est retourné à 0, on retentera plus tard
if ($textChemin1 > 0 && $textChemin2 > 0)
$texteChemin = $textChemin1 + $textChemin2;
else
exit;
// Affichage du résultat sous forme XML
sdk_header('text/xml');
echo "<root>";
echo "<Route>".$texteChemin."</Route>";
echo "</root>";
?>
Toute suggestion d'amélioration sera la bienvenue !