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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Function getDistance avec la clé API de GOOGLE

Re: Function getDistance avec la clé API de GOOGLE

par pereablanco » 27 févr. 2019, 19:14

Je reviens vers vous, car j'ai trouvé la solution à mon problème.


Pour que ça serve à d'autre, je mets ici la solution pour ceux qui seraient confronter au même problème que moi.


Voici mon script avant l'arrivée des CLÉ API imposées par Google.

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 = json_decode ($json);
 
    $distance=$root->route->leg->distance->value;
 
    if ($root->status == "OK")
    {
    return intval($distance);
    }
    else
    {
    return 0;
    }
}

Et voici maintenant le code corrigé avec la clé API Google.

Il faut bien sûr remplacer "MA_CLE_API" par votre clé API.

Pour ceux qui ne savent pas comment se procurer une clé API, rendez-vous ici pour vous procurer votre propre clé API Google : https://cloud.google.com/maps-platform/?hl=fr
IMPORTANT : il faut aussi activer la facturation auprès de Google en renseignant votre CB (mais pas d'inquiétude, si vous êtes un petit site internet, et qu'il il ne génère que très peu de trafic, Google ne vous facturera rien ou vraiment très très peu...).




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



IMPORTANT : Il faut aussi corriger tout les liens Google qui apparaitraient dans le code de vos pages comme suivant :

 <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script>

par

<script src="https://maps.googleapis.com/maps/api/js?key=MA_CLE_API" type="text/javascript"></script>

Voilà;)

Re: Function getDistance avec la clé API de GOOGLE

par @rthur » 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

Re: Function getDistance avec la clé API de GOOGLE

par Spols » 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.

Re: Function getDistance avec la clé API de GOOGLE

par pereablanco » 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); }

Re: Function getDistance avec la clé API de GOOGLE

par @rthur » 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.

Re: Function getDistance avec la clé API de GOOGLE

par pereablanco » 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€.**

Re: Function getDistance avec la clé API de GOOGLE

par @rthur » 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

Re: Function getDistance avec la clé API de GOOGLE

par pereablanco » 26 févr. 2019, 15:43

Non :(

Re: Function getDistance avec la clé API de GOOGLE

par @rthur » 26 févr. 2019, 11:07

Donc ça marche ?

Re: Function getDistance avec la clé API de GOOGLE

par pereablanco » 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

Re: Function getDistance avec la clé API de GOOGLE

par @rthur » 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 ?

Re: Function getDistance avec la clé API de GOOGLE

par pereablanco » 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.

Re: Function getDistance avec la clé API de GOOGLE

par @rthur » 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.

Re: Function getDistance avec la clé API de GOOGLE

par pereablanco » 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 ?

Re: Function getDistance avec la clé API de GOOGLE

par @rthur » 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