PHP卷曲循环在第5次迭代后提前终止

时间:2015-07-13 14:37:27

标签: php curl google-api

这是我在使用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

1 个答案:

答案 0 :(得分:2)

根据此处的API文档:https://developers.google.com/maps/documentation/geocoding/,您似乎每秒只能进行五次通话,每天总共发出2500次请求。

现在,我认为您的问题是如何正确处理费率限制,看起来这里有一些好主意:How to manage request limited API calls

(跟踪每个请求,在每组五个请求之间休眠等)

祝你好运!

编辑:对不起!没有看到你解决了它。认为由于API的限制为5,并且您的循环每五次迭代失败,因此存在相关性。