我與谷歌的地理編碼API的一個問題:捲曲地理編碼OVER_QUERY_LIMIT
我有應轉換爲緯度和使用cURL通過谷歌的地理編碼API經度的地址。你會在下面看到我的代碼。它工作正常,但突然停止工作,我得到了一個「OVER_QUERY_LIMIT」的答案。我查了一下,如果每天要求api超過2500次,通常會發生這種情況。這是不可能的,因爲我的網站剛剛完成並且每天有大約20-40個地理編碼請求。
那麼「OVER_QUERY_LIMIT」發生的真正問題是什麼?我的代碼有問題,谷歌以某種方式阻止它?!
ini_set('allow_url_fopen', true);
$CookiePath = 'mycookiepath/geocookie.txt';
$userAgent = "mysite.com";
$ListURLRoot = "http://maps.googleapis.com/maps/api/geocode/json";
$ListURLSuffix = '&sensor=false';
$Curl_Obj = curl_init(); // Setup cURL
curl_setopt($Curl_Obj, CURLOPT_COOKIEJAR, $CookiePath);
curl_setopt($Curl_Obj, CURLOPT_USERAGENT, $userAgent);
curl_setopt($Curl_Obj, CURLOPT_HEADER, 0);
curl_setopt($Curl_Obj, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($Curl_Obj, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($Curl_Obj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($Curl_Obj, CURLOPT_TIMEOUT, 30);
curl_setopt($Curl_Obj, CURLOPT_POST, 0);
$stAddr = str_replace(' ','+', $ast);
$City = str_replace(' ','+', $ac);
$address = "$stAddr,+$City,+{$aco},+{$ap}";
$address = str_replace(' ', '+', $address);
$ListURL = "{$ListURLRoot}?address=$address$ListURLSuffix";
curl_setopt ($Curl_Obj, CURLOPT_URL, $ListURL);
$output = curl_exec ($Curl_Obj);
GetLocation($output);
function GetLocation($output) {
global $db_connect;
$Loc = json_decode($output, true);
if(isset($Loc)) {
$i = 1;
while ($Loc['status']=="OVER_QUERY_LIMIT") {
if ($i > 14) {
echo "Geocode failed!";
exit();
}
sleep(1);
$i++;
}
if(isset($Loc['status']) && stristr($Loc['status'], 'OK')) {
if(isset($Loc['results'][0]['geometry']['location'])) {
$Lat = $Loc['results'][0]['geometry']['location']['lat'];
$Lng = $Loc['results'][0]['geometry']['location']['lng'];
}
}
else {
error_log($Loc['status'], 0);
echo "Unknown error occured!";
exit();
}
}
}
在此先感謝!
您使用的是共享服務器(或RackSpace上的服務器)嗎?如果您太快地對代碼超過10個位置進行地理編碼(達到速率限制),您也會得到此錯誤。 – geocodezip
我不知道這些是什麼(對不起:/)。我的網站很簡單,由一個webhoster託管(共享託管?!)。是的,但我並沒有一次geocode這麼多,我認爲我的代碼中的睡眠方法會阻止發生?! – user2072953
如果它是共享主機,並且您未使用服務器密鑰,則配額/速率限制將應用於該主機上的所有網站。 – geocodezip