2012-12-27 15 views
6

Zbieram informacje o lokalizacji sklepów. Wyszukiwanie jest:Google Places API: next_page_token error

<?php 
... 
$url='https://maps.googleapis.com/maps/api/place/search/json?key=[my_key]&location=40.420989,-3.706812&radius=1000030&=&sensor=false'; 
$body=file_get_contents($url); 
... 
?> 

wrócę do JSON bez problemów, i wskazuje, że istnieje inna strona z wynikami. Wrócę do innego połączenia następująco

<?php 
... 
$url2='https://maps.googleapis.com/maps/api/place/search/json?key=[my_key]&pagetoken=ClREAAAAQXKNHPVGCkTC_MdjSqi2T0KBDMWjEu4KF1Ylw1761Po-67AnNSp4zw0wXD4oocGpx4olSl4k2LyklJBl3mBF4VPmxp3IoOCHDRlXVmivaDsSEBuG_V1GvCH1gS5s0LCuy3EaFNXxUzzHhZ5ZRYNfeGHuqewR6Zk7&sensor=false'; 
$body=file_get_contents($url2); 
... 
?> 

Jeśli uruchomić go z drugim wywołaniu pojawia się błąd „status”

-> invalid_request

Ale kiedy wklej Przeglądarka ulr2 w wyniku jest poprawna.

Jak mogę to naprawić?

Dzięki

+0

masz zorientowali się problemu hte również zwraca mi prośbę zaprzeczył błąd –

Odpowiedz

-2

Pierwsze zapytanie wygeneruje 2 strona token. Po prostu dodajesz "& pagetoken = tokenvalue" do swojego URI.

Pewnie, że działa. Brak alternatywnej opcji.

+0

Robię to, ale to nie działa. – user1932300

+0

Dodał już pagetoken do swojego adresu URL, a rozwiązanie opóźnia kolejne zapytania, a tutaj (https://developers.google.com/places/documentation/search#PlaceSearchPaging) jest oficjalnym dokumentem firmy Apple służącym do weryfikacji. –

38

Ma to coś wspólnego z czasem pomiędzy żądaniami, jeśli uruchomisz je od razu po sobie, to nie jest jeszcze ważne, musisz poczekać kilka sekund pomiędzy kolejnymi żądaniami.

Wynika to z tego, że warunki licencji google nie pozwalają na pobieranie wszystkich wyników naraz i zwracanie ich jednocześnie do użytkownika. Powinieneś mieć akcję użytkownika z prośbą o więcej wyników, co powoduje opóźnienie o kilka sekund.

+0

ta odpowiedź powinna być oznaczona jako poprawna ... zapisała mój dzień .. – allemattio

+0

@allemattio masz rację, ta odpowiedź powinna być oznaczona jako poprawna i uratowała mi też dzień. –

+0

To jest poprawna odpowiedź - dodano 5 sekund snu przed złożeniem wniosku, a wszystko jest dobrze na świecie! –

5

sen (2) pomiędzy żądaniami rozwiąże problemu

+0

niesamowite rozwiązanie !! –

1

Spróbuj poniżej kodu, użyłem (2) funkcja sleep za opóźnienie pomiędzy wniosków, ponieważ obok pagetoken musi zostać zatwierdzone na serwerze Google. Możesz nawet użyć pętli do usunięcia powtórzenia kodu.

// zapytanie tutaj

$query = ""; 

// klucz api tutaj

$api_key = ""; 

// wywołanie API Kod

try { 
     echo $url = "https://maps.googleapis.com/maps/api/place/textsearch/json?query=" . $query . "&location=40.420989,-3.706812&radius=1000030&=&sensor=false&key=" . $api_key; 
     echo "<br>"; 
     $result = file_get_contents($url); 
     $query_results = json_decode($result, true); 
     echo "First set" . "<br>"; 
     print_r($query_results); 
     $next_page_token = $query_results['next_page_token']; 
     unset($query_results); 
     $query_results = array(); 

     sleep(2); 
     echo $url = "https://maps.googleapis.com/maps/api/place/textsearch/json?query=" . $query . "&location=40.420989,-3.706812&radius=1000030&=&sensor=false&key=" . $api_key . "&pagetoken=" . $next_page_token; 
     echo "<br>"; 
     $result = file_get_contents($url); 
     $query_results = json_decode($result, true); 
     echo "Second set" . "<br>"; 
     print_r($query_results); 
     $next_page_token = $query_results['next_page_token']; 
     unset($query_results); 
     $query_results = array(); 

     sleep(2); 
     echo $url = "https://maps.googleapis.com/maps/api/place/textsearch/json?query=" . $query . "&location=40.420989,-3.706812&radius=1000030&=&sensor=false&key=" . $api_key . "&pagetoken=" . $next_page_token; 
     echo "<br>"; 
     $result = file_get_contents($url); 
     $query_results = json_decode($result, true);  
     echo "Third set" . "<br>"; 
     print_r($query_results); 
     unset($query_results); 
     $query_results = array(); 
    } catch (Exception $e) { 
     $e->getCode(); 
     $e->getLine(); 
    } 
Powiązane problemy