这是我在使用curl之前遇到的一个问题。我们在一天开始时进行海量数据导入,其中一部分是对一些地址进行地理编码。我们使用谷歌的API来做到这一点,所以一个简单的卷曲循环(应该)工作,至少这是我的想法。
以下是我的两个函数:请注意,properties变量包含大约100个条目。但是,无论我刷新多少次,循环始终都会在第5次迭代后停止调用curl函数 。请注意,循环不会终止,只有对curl函数的调用才会丢失。
function geocode()
{
$service_url = 'https://maps.googleapis.com/maps/api/geocode/json?key=' . GAPI_KEY . '&address=';
$properties = $this->listing_model->get_non_geocoded();
if ($properties) {
foreach ($properties->result() as $property) {
$service_url .= urlencode($property->address . "," . $property->city . "," . $property->state . " " . $property->zip);
try {
$search = $this->curl($service_url);
} catch (Exception $e) {
var_dump($e);
}
}
}
}
function curl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
unset($ch);
return $result;
}
当然还有var转储:
...previous (first) 3 entries...
string '14' (length=2)
object(stdClass)[116]
public 'lat' => float #######
public 'lng' => float #######
string '15' (length=2)
object(stdClass)[131]
public 'lat' => float #######
public 'lng' => float #######
string '16' (length=2)
null <-- ? Should be from curl
string '17' (length=2)
null <-- ? Should be from curl
string '18' (length=2)
null <-- ? Should be from curl
string '19' (length=2)
null <-- ? Should be from curl
答案 0 :(得分:2)
根据此处的API文档:https://developers.google.com/maps/documentation/geocoding/,您似乎每秒只能进行五次通话,每天总共发出2500次请求。
现在,我认为您的问题是如何正确处理费率限制,看起来这里有一些好主意:How to manage request limited API calls
(跟踪每个请求,在每组五个请求之间休眠等)
祝你好运!
编辑:对不起!没有看到你解决了它。认为由于API的限制为5,并且您的循环每五次迭代失败,因此存在相关性。