Google Places API : next_page_token error

六月ゝ 毕业季﹏ 提交于 2019-12-21 07:14:13

问题


I'm gathering information on the location of stores. The search is:

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

I return a Json without problems, and indicates that there is another page of results. I'll be back to make another call as follows

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

If I run it with the second call I get an error

'status' -> INVALID_REQUEST

But when I paste the ulr2 browser in the result is correct.

How I can fix it?

Thanks


回答1:


It has something to do with the timing between the requests, if you run them immediately one after the other, the pagetoken isn't valid yet, you have to wait a few seconds between consecutive requests.

This is because google's license terms don't allow you to fetch all the results at once and return them all at once to the user. You should have a user action asking for more results, which adds a delay of a couple of seconds.




回答2:


sleep(2) between requests will solve the problem




回答3:


Sleep(1.3) is the shortest amount of time that seemed to work. In other words the next page token becomes active about 1.3 seconds after it is returned in the previous API request.




回答4:


Please try below code, I have used sleep(2) function for delay between requests, because next pagetoken needs to be validated on google server. You can even use looping to remove code repetation.

// your query here

$query = "";

// api key here

$api_key = ""; 

// api call code

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



回答5:


The first query will generate 2nd page token. You just add "&pagetoken=tokenvalue" in your uri.

Sure it work. No alternative option.



来源:https://stackoverflow.com/questions/14056488/google-places-api-next-page-token-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!