Korzystanie z PHP (curl) do pobierania danych z JSON (Google Maps API)

Jestem całkiem nowy w JSON, i próbuję uzyskać szerokość i długość geograficznie zakodowanego miasta z Google Maps API za pomocą curl. Funkcja, której używam to:

function geocode($city){
   $cityclean = str_replace (" ", "+", $city);
   $details_url = "http://maps.googleapis.com/maps/api/geocode/json?address=" . $cityclean . "&sensor=false";

   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $details_url);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   $geoloc = json_decode(curl_exec($ch), true);

   $step1 = $geoloc['results'];
   $step2 = $step1['geometry'];
   $coords = $step2['location'];

   print $coords['lat'];
   print $coords['lng'];

}
Celem tego wszystkiego jest wyciągnięcie wartości lat i LNG z tablicy wyników - > Geometria - > lokalizacja następującego JSON:
{
  "status": "OK",
  "results": [ {
    "types": [ "locality", "political" ],
    "formatted_address": "Westminster, London, UK",
    "address_components": [ {
      "long_name": "London",
      "short_name": "London",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "Westminster",
      "short_name": "Westminster",
      "types": [ "administrative_area_level_3", "political" ]
    }, {
      "long_name": "Greater London",
      "short_name": "Greater London",
      "types": [ "administrative_area_level_2", "political" ]
    }, {
      "long_name": "England",
      "short_name": "England",
      "types": [ "administrative_area_level_1", "political" ]
    }, {
      "long_name": "United Kingdom",
      "short_name": "GB",
      "types": [ "country", "political" ]
    } ],
    "geometry": {
      "location": {
        "lat": 51.5001524,
        "lng": -0.1262362
      },
      "location_type": "APPROXIMATE",
      "viewport": {
        "southwest": {
          "lat": 51.3493528,
          "lng": -0.3783580
        },
        "northeast": {
          "lat": 51.7040647,
          "lng": 0.1502295
        }
      },
      "bounds": {
        "southwest": {
          "lat": 51.3493528,
          "lng": -0.3783580
        },
        "northeast": {
          "lat": 51.7040647,
          "lng": 0.1502295
        }
      }
    }
  } ]
}

Jednak nic nie drukuje. Wiem, że funkcja pomyślnie pobiera JSON z Google i przynosi go na mój serwer, jak zrobiłem druk polecenie dla wartości 'status' i zwróciło 'OK'. Problemem wydaje się być, gdy próbuję zagłębić się głębiej w JSON.

Przepraszam, jeśli to prosty problem, ale jak mówiłem, jestem w tym nowy i doprowadza mnie to do szału.

Wielkie dzięki! :)

Author: Jack W, 2011-04-02

2 answers

Zauważ, że wydaje się, że results zawiera tablicę ( wyników; i geometry jest jednym elementem wewnątrz jednego wyniku.

Tutaj możesz zobaczyć, że zawartość wyników jest ograniczona przez [] -- co wskazuje, że jest to tablica.


Więc musisz najpierw uzyskać dostęp do pierwszego wyniku: $geoloc['results'][0]
wewnątrz którego będziesz miał geometrię : $geoloc['results'][0]['geometry']

Który pozwoli ci uzyskać szerokość i długość geograficzną:

var_dump($geoloc['results'][0]['geometry']['location']['lat']);
var_dump($geoloc['results'][0]['geometry']['location']['lng']);


I Załóżmy, że w zależności od adresu, na którym wyszukałeś, czasami będziesz mieć więcej niż jeden element w tablicy results.

 19
Author: Pascal MARTIN,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-02 20:16:15

Potrzebujesz tego:

$fullurl = "http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true";
$string .= file_get_contents($fullurl); // get json content
$json_a = json_decode($string, true); //json decoder

echo $json_a['results'][0]['geometry']['location']['lat']; // get lat for json
echo $json_a['results'][0]['geometry']['location']['lng']; // get ing for json
 19
Author: Fernando Cardenas 'Pelonxz',
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-25 01:11:23