Page 1 sur 2
Function getDistance avec la clé API de GOOGLE
Posté : 19 févr. 2019, 12:53
par pereablanco
Bonjour,
Je rencontre actuellement un problème avec Function getDistance.
Elle fonctionnait correctement jusque là.
Je pense que mon problème vient du fait que
Google impose une clé API (enfin si j'ai bien saisi).
Voici mon code actuel :
Code : Tout sélectionner
}
function getDistance($adresse1,$adresse2){
$adresse1 = str_replace(" ", "+", $adresse1);
$adresse2 = str_replace(" ", "+", $adresse2);
$url='http://maps.google.com/maps/api/directions/xml?language=fr&origin='.$adresse1.'&destination='.$adresse2.'&sensor=false';
$xml=file_get_contents($url);
$root = simplexml_load_string($xml);
$distance=$root->route->leg->distance->value;
if ($root->status == "OK")
{
return intval($distance);
}
else
{
return 0;
}
}
Dans cette portion de code, le lien Google semble poser problème. Je n'arrive pas à comprendre comment intégrer ma clé API.
Merci d'avance pour votre correctif.
Cordialement
Jonathan
Re: Function getDistance avec la clé API de GOOGLE
Posté : 20 févr. 2019, 17:57
par @rthur
En lisant la doc ?
C'est juste un paramètre à ajouter comme tu as fait pour language mais je me souviens plus du nom de ce paramètre mais je suis sûr que tu vas la retrouver en cherchant dans la doc officielle
https://cloud.google.com/maps-platform/?hl=fr
Re: Function getDistance avec la clé API de GOOGLE
Posté : 25 févr. 2019, 18:22
par pereablanco
Bonsoir,
j'ai beau retour le problème dans tout les sens, je n'arrive pas a intégrer ma nouvelle clé Google API.
MON CODE ACTUEL (avec l'ancien lien GOOLGE) :
Code : Tout sélectionner
function getDistance($adresse1,$adresse2){
$adresse1 = str_replace(" ", "+", $adresse1);
$adresse2 = str_replace(" ", "+", $adresse2);
$url='https://www.google.com/maps/dir/?api=1&origin='.$adresse1.'&destination='.$adresse2.'&sensor=false';
$xml=file_get_contents($url);
$root = simplexml_load_string($xml);
$distance=$root->route->leg->distance->value;
if ($root->status == "OK")
{
return intval($distance);
}
else
{
return 0;
}
}
Je dois absolument rester sur le langage XML.
Mais comment faire ?
Re: Function getDistance avec la clé API de GOOGLE
Posté : 25 févr. 2019, 19:41
par @rthur
Qu'as-tu essayé ?
La fonction file_get_contents() a le même comportement que de saisir l'url dans la barre d'adresse de ton navigateur web.
Donc tape l'url dans la barre d'adresse de ton navigateur et fait des essais pour avoir quelque chose qui fonctionne.
Re: Function getDistance avec la clé API de GOOGLE
Posté : 25 févr. 2019, 21:52
par pereablanco
}
function getDistance($adresse1,$adresse2){
$adresse1 = str_replace(" ", "+", $adresse1);
$adresse2 = str_replace(" ", "+", $adresse2);
$url='
https://www.google.com/maps/dir/?api=1& ... nsor=false';
$xml=file_get_contents($url);
$root = simplexml_load_string($xml);
$distance=$root->route->leg->distance->value;
if ($root->status == "OK")
{
return intval($distance);
}
else
{
return 0;
}
}
Mon script fonctionnait correctement avant l'arrivée imposée des API Google.
J'ai essayer de remplacer :
Code : Tout sélectionner
$url = 'http://maps.google.com/maps/api/directions/xml?language=fr&origin='.$adresse1.'&destination='.$adresse2.'&sensor=false';
par
Code : Tout sélectionner
$url = 'http://maps.google.com/maps/api/directions/xml?language=fr&origin='.$adresse1.'&destination='.$adresse2.'&sensor=false&key=MA_CLE_API';
et d'autre combinaison.
Je sais pas ou je dois coller ma clé dans cette partie de code.
Re: Function getDistance avec la clé API de GOOGLE
Posté : 25 févr. 2019, 23:55
par @rthur
Et quand tu saisies l'url avec le paramètre key dans la barre d'adresse de ton navigateur, ça donne quoi ?
Re: Function getDistance avec la clé API de GOOGLE
Posté : 26 févr. 2019, 08:57
par pereablanco
Code : Tout sélectionner
http://maps.google.com/maps/api/directions/xml?language=fr&origin='.$adresse1.'&destination='.$adresse2.'&sensor=false&key=MA_CLE_API
lorsque je mets ça dans le navigateur j'ai :
REQUEST_DENIED Requests to this API must be over SSL. Load the API with "https://" instead of "http://".
Si je mets ça :
J'obtiens
OK Vancouver, BC, Canada Seattle, Washington, États-Unis San Francisco, Californie, États-Unis Vancouver, BC, Canada OK 327914 3 jours 19 heures 1709733 1 710 km OK 0 1 minute 0 1 m OK 275549 3 jours 5 heures 1455100 1 455 km OK 54449 15 heures 7 minutes 267160 267 km
Re: Function getDistance avec la clé API de GOOGLE
Posté : 26 févr. 2019, 11:07
par @rthur
Donc ça marche ?
Re: Function getDistance avec la clé API de GOOGLE
Posté : 26 févr. 2019, 15:43
par pereablanco
Non

Re: Function getDistance avec la clé API de GOOGLE
Posté : 26 févr. 2019, 18:04
par @rthur
Qu'est-ce qui ne marche pas ?
Ça serait bien que tu fasses un effort pour debuguer ton propre code, sinon c'est compliqué de pouvoir t'aider
Re: Function getDistance avec la clé API de GOOGLE
Posté : 26 févr. 2019, 20:13
par pereablanco
Je cherche aussi de mon côté.
Grace à ce code (avant que Google n'impose la clé API), je pouvais calculer la distance de mon domicile à une destination afin de déterminer des frais de déplacement :
EXEMPLE : le client renseignait mon formulaire et à la question "souhaitez vous que je me déplace ?", le client devait simplement indiquer le nom de sa ville (dans un champ vide) et valider pour voir apparaitre les frais lié à ce déplacement.
Mais depuis le changement de Google, les frais affichés lorsque le client valide le champ (VILLE) ne sont plus correct. Le script puise systématiquement sur la sommes la plus élevée (150€).
Pour information, j'ai programmé mes frais de déplacement comme suivant : 20€ pour 15 à 30 km, 30€ pour 30 à 60 km, 70€ pour 60 à 120 km et 150€ de 120 à 200km.
En se basant sur une ville comme Paris comme point de départ, et lorsque le client indique une ville en dessous de 30km,** le script affiche par erreur 150€ au lien de 20€.**
Re: Function getDistance avec la clé API de GOOGLE
Posté : 26 févr. 2019, 21:52
par @rthur
Et bien regardes dans le XML ce que tu dois récupérer, et pourquoi ton script ne récupères pas la "bonne" valeur.
Re: Function getDistance avec la clé API de GOOGLE
Posté : 26 févr. 2019, 21:57
par pereablanco
J'ai pu arriver à ceci mais ça ne fonctionne toujours pas. Le script continue d'afficher les frais de déplacement les plus élevés.
Je vais voir si je n'ai pas loupé autre chose dans une autre partie de code.
Code : Tout sélectionner
function getDistance($adresse1,$adresse2){
$adresse1 = str_replace(" ", "+", $adresse1);
$adresse2 = str_replace(" ", "+", $adresse2);
$api = file_get_contents("https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=".$adresse1."&destinations=".$adresse2."&key=MA_CLE_API");
$data = json_decode($api);
$distance = $data->rows[0]->elements[0]->distance->value / 1000;
var_dump($distance);
die();
return intval($distance);
}
Re: Function getDistance avec la clé API de GOOGLE
Posté : 27 févr. 2019, 09:01
par Spols
tu obtiens du xml et tu tente de le décoder comme du JSON il faut le décoder en XML.
Re: Function getDistance avec la clé API de GOOGLE
Posté : 27 févr. 2019, 10:52
par @rthur
tu obtiens du xml et tu tente de le décoder comme du JSON il faut le décoder en XML.
Visiblement il a changé son url d'appel à l'API pour avoir du JSON