我正在收集有关商店位置的信息。 搜索是:
<?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);
...
?>
我没有问题地返回一个Json,并指出还有另一页结果。 我将回来再打一次如下电话
<?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);
...
?>
如果我在第二次通话时运行它,我会收到错误
'status' - &gt; INVALID_REQUEST
但是当我在结果中粘贴ulr2浏览器时是正确的。
我该如何解决?
由于
答案 0 :(得分:45)
它与请求之间的时间有关,如果你一个接一个地立即运行它们,pagetoken还没有效,你必须在连续请求之间等待几秒钟。
这是因为谷歌的许可条款不允许您立即获取所有结果并立即将它们全部返回给用户。您应该有一个用户操作要求更多结果,这会延迟几秒钟。
答案 1 :(得分:7)
答案 2 :(得分:1)
请尝试下面的代码,我已经使用sleep(2)函数来延迟请求之间的延迟,因为下一个pagetoken需要在google服务器上验证。 您甚至可以使用循环来删除代码重复。
//您的查询
$query = "";
// api key here
$api_key = "";
// api呼叫代码
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();
}
答案 3 :(得分:1)
Sleep(1.3)是似乎最有效的时间。换句话说,下一个页面令牌在上一个API请求中返回后约1.3秒变为有效。
答案 4 :(得分:-2)
第一个查询将生成第二页令牌。 您只需在您的uri中添加“&amp; pagetoken = tokenvalue”。
确实有效。没有其他选择。