[RESOLU] Function getDistance avec la clé API de GOOGLE

Eléphanteau du PHP | 33 Messages

19 févr. 2019, 12:53

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 févr. 2019, 17:57

En lisant la doc ? :-D

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
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 33 Messages

25 févr. 2019, 18:22

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 ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 févr. 2019, 19:41

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.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 33 Messages

25 févr. 2019, 21:52

}

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 févr. 2019, 23:55

Et quand tu saisies l'url avec le paramètre key dans la barre d'adresse de ton navigateur, ça donne quoi ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 33 Messages

26 févr. 2019, 08:57

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 févr. 2019, 11:07

Donc ça marche ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 33 Messages

26 févr. 2019, 15:43

Non :(

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 févr. 2019, 18:04

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
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 33 Messages

26 févr. 2019, 20:13

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€.**

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 févr. 2019, 21:52

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.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 33 Messages

26 févr. 2019, 21:57

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); }

Mammouth du PHP | 1967 Messages

27 févr. 2019, 09:01

tu obtiens du xml et tu tente de le décoder comme du JSON il faut le décoder en XML.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

27 févr. 2019, 10:52

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
Quand tout le reste a échoué, lisez le mode d'emploi...