2013-10-23 72 views
0

我與谷歌的地理編碼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(); 
     } 
    } 
} 

在此先感謝!

+0

您使用的是共享服務器(或RackSpace上的服務器)嗎?如果您太快地對代碼超過10個位置進行地理編碼(達到速率限制),您也會得到此錯誤。 – geocodezip

+0

我不知道這些是什麼(對不起:/)。我的網站很簡單,由一個webhoster託管(共享託管?!)。是的,但我並沒有一次geocode這麼多,我認爲我的代碼中的睡眠方法會阻止發生?! – user2072953

+0

如果它是共享主機,並且您未使用服務器密鑰,則配額/速率限制將應用於該主機上的所有網站。 – geocodezip

回答

0

這主要是Google的問題。儘量避免服務器端地理編碼。而是使用客戶端JavaScript解析器。

+0

但它更容易使用服務器端地理編碼Ehen我想要在MySQL數據庫中存儲lat和lng。 – user2072953