Avatar billede michaeltryl Seniormester
06. december 2017 - 13:24 Der er 10 kommentarer og
1 løsning

få indhold fra google api

Hej
Jeg ønsker at finde køretiden fra A til B og udskrive den.
Jeg har fundet følgende kode og en del andre koder, som jeg ikke kan få til at virke.
Håber nogen kan hjælpe

$from = "mariagervej 24 8900 randers";
$to = "bøsbrovej 11, 8940 randers SV";

$from = urlencode($from);
$to = urlencode($to);

$data = file_get_contents("http://maps.googleapis.com/maps/api/distancematrix/json?origins=$from&destinations=$to&language=en-EN&sensor=false");
$data = json_decode($data);

$time = 0;
$distance = 0;

foreach($data->rows[0]->elements as $road) {
    $time += $road->duration->value;
    $distance += $road->distance->value;
}
$km=$distance/1000;
echo "To: ".$data->destination_addresses[0];
echo "<br/>";
echo "From: ".$data->origin_addresses[0];
echo "<br/>";
echo "Time: ".$time." seconds";
echo "<br/>";
echo "Distance: ".$distance." meters";
echo "<br/>";
echo $km;
Avatar billede michael_stim Ekspert
06. december 2017 - 13:42 #1
Hvad er det der ikke fungerer? Når jeg copy/paster din kode får jeg fölgende:
To: Bøsbrovej 11, 8940 Randers SV, Denmark
From: Mariagervej 24, 8900 Randers C, Denmark
Time: 356 seconds
Distance: 2565 meters
2.565
Avatar billede michael_stim Ekspert
06. december 2017 - 13:45 #2
Og i URL'en står er:
{
  "destination_addresses" : [ "Bøsbrovej 11, 8940 Randers SV, Danmark" ],
  "origin_addresses" : [ "Mariagervej 24, 8900 Randers C, Danmark" ],
  "rows" : [
      {
        "elements" : [
            {
              "distance" : {
                  "text" : "2,6 km",
                  "value" : 2565
              },
              "duration" : {
                  "text" : "6 min",
                  "value" : 356
              },
              "status" : "OK"
            }
        ]
      }
  ],
  "status" : "OK"
}
Avatar billede michaeltryl Seniormester
06. december 2017 - 13:45 #3
mærkeligt
jeg får dette

Warning: file_get_contents(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /home/www/magiske-michael.dk/julemand/rute-test.php on line 8

Warning: file_get_contents(http://maps.googleapis.com/maps/api/distancematrix/json?origins=mariagervej+24+8900+randers&destinations=b%C3%B8sbrovej+11%2C+8940+randers+SV&language=en-EN&sensor=false): failed to open stream: no suitable wrapper could be found in /home/www/magiske-michael.dk/julemand/rute-test.php on line 8

Warning: Invalid argument supplied for foreach() in /home/www/magiske-michael.dk/julemand/rute-test.php on line 14
To:
From:
Time: 0 seconds
Distance: 0 meters
0
Avatar billede michael_stim Ekspert
06. december 2017 - 13:49 #4
Det er en serverfejl. Skal formodentlig enables i php.ini
Avatar billede acore Ekspert
06. december 2017 - 13:49 #5
Det har et eller andet med danske bogstaver og din encoding at gøre. Dit googleapi kald er ok - erstat $from og $to med adresserne og test i broser - virker hos mig.

Erstat "ø" med "o" i adressen og det virker i din kode (i hvert fald hos mig) - Google fanger selv, at "o" skal være "ø" og retter det i svaret.
Avatar billede michaeltryl Seniormester
06. december 2017 - 13:55 #6
ok tak for jeres svar jeg må høre min udbyder om det er slået fra i php.ini :-)
Avatar billede michael_stim Ekspert
06. december 2017 - 13:56 #7
Til: allow_url_fopen=On
Avatar billede michael_stim Ekspert
06. december 2017 - 13:59 #8
Spörgsmålet er om du behöver file_get_contents.
Avatar billede acore Ekspert
06. december 2017 - 13:59 #9
Før du taler med din udbyder, så test om det hjælper at erstatte "ø" med "o" i adressen. Som jeg skrev - det virkede hos mig, hvilken var årsagen til, at jeg svarede, som jeg gjorde i #5. Og de fleste kører med allow_url_open
Avatar billede michaeltryl Seniormester
06. december 2017 - 14:00 #10
mange tak
michael_stim
Jeg skulle have spurgt her tidligere, nu virker det helt perfekt :-)
Avatar billede michael_stim Ekspert
06. december 2017 - 14:25 #11
Med cURL:

<?php
$from = "mariagervej 24 8900 randers";
$to = "bøsbrovej 11, 8940 randers SV";

$from = urlencode($from);
$to = urlencode($to);

$link = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=$from&destinations=$to&language=en-EN&sensor=false";

$ch= curl_init($link);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch));

$time = 0;
$distance = 0;

foreach($data->rows[0]->elements as $road) {
    $time += $road->duration->value;
    $distance += $road->distance->value;
}
$km=$distance/1000;
echo "To: ".$data->destination_addresses[0];
echo "<br/>";
echo "From: ".$data->origin_addresses[0];
echo "<br/>";
echo "Time: ".$time." seconds";
echo "<br/>";
echo "Distance: ".$distance." meters";
echo "<br/>";
echo $km;


Nu ved jeg ikke hvad der står på på de andre distancer, men er der kun en, så er din foreach overflødig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB