2012-12-27 26 views
6

Sto raccogliendo informazioni sulla posizione dei negozi. La ricerca è:API Google Places: errore next_page_token

<?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); 
... 
?> 

torno un JSON senza problemi, e indica che v'è un'altra pagina dei risultati. Torno ad effettuare un'altra chiamata come segue

<?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); 
... 
?> 

Se l'eseguo con la seconda chiamata ottengo un errore

'status'

-> invalid_request

Ma quando ho incolla il il browser ulr2 nel risultato è corretto.

Come posso risolvere il problema?

Grazie

+0

l'hai capito problema hte mi restituisce anche richiesta errore negato –

risposta

-2

La prima query genera un token di seconda pagina. Devi solo aggiungere "& pagetoken = tokenvalue" nella tua uri.

Sicuro che funzioni. Nessuna opzione alternativa.

+0

Lo faccio, ma non funziona. – user1932300

+0

Ha già aggiunto il pagetoken nel suo URL e la soluzione sta ritardando le richieste successive e qui (https://developers.google.com/places/documentation/search#PlaceSearchPaging) è il documento ufficiale Apple per verificarlo. –

38

Ha qualcosa a che fare con il tempismo tra le richieste, se le si eseguono immediatamente una dopo l'altra, il pagetoken non è ancora valido, è necessario attendere qualche secondo tra richieste consecutive.

Questo perché i termini della licenza di Google non consentono di recuperare tutti i risultati contemporaneamente e restituirli tutti in una volta all'utente. Dovresti avere un'azione da parte dell'utente che richiede più risultati, il che aggiunge un ritardo di un paio di secondi.

+0

questa risposta dovrebbe essere contrassegnata come corretta..salvato la mia giornata .. – allemattio

+0

@allemattio hai ragione questa risposta dovrebbe essere contrassegnata come corretta e ha salvato anche la mia giornata. –

+0

Questa è la risposta corretta - ha aggiunto un sonno di 5 secondi prima della richiesta, e tutto va bene per il mondo! –

5

sonno (2) tra le richieste risolverà il problema

+0

soluzione fantastica !! –

1

Prova sotto il codice, ho usato il sonno (2) Funzione di ritardo tra le richieste, perché accanto pagetoken deve essere convalidato su server di Google. È anche possibile utilizzare il loop per rimuovere la ripetizione del codice.

// la query qui

$query = ""; 

// chiave API qui

$api_key = ""; 

// chiamata API codice

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(); 
    } 
Problemi correlati