Kevinleg Posté(e) le 4 mai 2022 Posté(e) le 4 mai 2022 Bonjour à tous, J'ai un nas DS220j, avec DSM 7.0-41890. Sur celui-ci j'ai installé les paquets Webstation et PHP 7.4. Je l'utilise pour moi même, notamment pour automatiser la création de mes devis, et autre. Jusqu'ici aucun problème, PHP s’exécute bien, et je ne rencontre pas de difficultés. Afin d'automatiser le calcul des distances vers mes lieux d'intervention je souhaite utiliser l'API google distance matrix via le script ci-dessous : <form action="testapi.php"> Aller à : <input type="text" name="destination"> <input type="submit" name="submit" value="Get distance"> </form> <?php if (isset($_GET['submit'])) { $origin = 'Larçay 37270'; $destination = $_GET['destination']; $url='https://maps.googleapis.com/maps/api/distancematrix/json?destinations='.urlencode($destination).'&origins='.urlencode($origin).'&key=X&language=fr-Fr&sensor=false'; $distance_data = file_get_contents($url); var_dump($url); echo '</br>'; var_dump($distance_data); echo '</br>'; print_r(error_get_last()); J'obtiens l'erreur suivante : No such file or directory [file] => /volume1/web/testapi.php [line] => 22 , et $ distance_data est null file_get_contents ne parviens pas à accéder à l'URL dont j'ai besoin, alors que depuis mon serveur OVH ce script fonctionne parfaitement ! Quelqu'un aurait-il une idée de ce qui pourrait se passer ? Mon IP serait bloquée ? Problème de certificat SSL ? J'espère être précis dans ma demande, n'hésitez pas à me poser plus de questions si besoin, Merci à tous, Kevin
Kevinleg Posté(e) le 5 mai 2022 Auteur Posté(e) le 5 mai 2022 Bonjour à tous cela fonctionne avec curl ! $url='https://maps.googleapis.com/maps/api/distancematrix/json?destinations='.urlencode($destination).'&origins='.urlencode($origin).'&key=maclé&language=fr-Fr&sensor=false'; //Test curl echo 'Test Curl</br>'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_PROXYPORT, 3128); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $response = curl_exec($ch); curl_close($ch); var_dump($response); //Test curl
cadkey Posté(e) le 6 mai 2022 Posté(e) le 6 mai 2022 @Kevinleg bonjour, Tu peux recuperer $response en tableau (array) formaté lisible via json_decode $Datas = json_decode($response, true); $Datas['rows'][0]['elements'][0]['distance']['text'] dans ton unité de distance $Datas['rows'][0]['elements'][0]['distance']['value'] en metre $Datas['rows'][0]['elements'][0]['duration']['text'] en heure et min $Datas['rows'][0]['elements'][0]['duration']['value'] = en seconde
Kevinleg Posté(e) le 15 mai 2022 Auteur Posté(e) le 15 mai 2022 Merci beaucoup cadkey ! Effectivement j'ai fait exactement comme ça ... $distance_arr = json_decode($response); if ($distance_arr->status=='OK') { $destination_addresses = $distance_arr->destination_addresses[0]; $origin_addresses = $distance_arr->origin_addresses[0]; } else { $erreur_adresse = "<p>La requète est invalide</p>"; } if ($origin_addresses=="" or $destination_addresses=="") { $erreur_adresse = "<p>Destination non trouvée</p>"; } // récupérer les éléments dans un tableau $elements = $distance_arr->rows[0]->elements; $distance = $elements[0]->distance->text; $duration = $elements[0]->duration->text; } Je me rends compte que j'étais tellement content que ça fonctionne je n'ai pas partagé la solution en entier. Par défaut curl n'est pas activé dans php sur webstation pour faire celà il faut effectuer la manip suivante : aller dans web station > parametres du langage de script > modifier un profil php > extensions > cocher curl Si d'autres ont le même souci j'espère que ça aidera. PS : J'ai également trouvé un script d'auto complétion pour renseigner l'adresse de destination et de départ : https://github.com/lewagon/google-place-autocomplete
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.