使用Google Maps API的Big Foreach循环

时间:2012-12-19 17:57:30

标签: php mysql google-maps-api-3

我对foreach()循环和Google Maps API类有更大的问题。

目前我的MySQL表中有1500个数据集,我按“纬度IS NULL”排序。 然后我想foreach()他们并每次调用Google Maps API(KM6_Geo)并将新的地理编码保存到MySQL数据库。

BUT: 大约250/300次呼叫/更新后,我的服务器回复“超时”。

现在这是我当前的脚本:

    foreach(KM6_Addresses::getGeoCodes() as $item):

        $geocode = KM6_Geo::generate($item['street'].' '.$item['zipcode'].' '.$item['city']);
        $data = array(
            'lat'       => $geocode['lat'],
            'lng'       => $geocode['lon']

        );

        $where = array('company_id' => $item['company_id']);        
        KM6_Addresses::updateGeoCode($data,$where);
    endforeach;

现在我的问题: 我如何foreach()与包或类似的东西。所以我不会尝试更新1500个数据集。

也许有人可以帮助我。

谢谢! ;)

1 个答案:

答案 0 :(得分:1)

您似乎已达到API配额。

这是由某一天来自同一IP的过多请求或一段时间内过多的请求引发的。

我会考虑做以下事情。

尝试每50-100个数据集实施一次暂停,看看这是否有助于第一组配额。

另一个是查看可能具有更高配额的API总理。

在同一行上检查this以获取其他回复。

- 编辑 -

我确实遇到了this

如果您能够获取状态代码,如果您获得了TOO_MANY_Queries,则在他们的Python代码中,它们会执行2.0秒的延迟。

也许正在做类似的事情,你在每个ForEach之间应用2s延迟,或者循环直到你达到极限,睡觉(2)然后恢复,看看是否有效。

这里最重要的是你不想被列入黑名单。 你需要在10-30秒内运行1500?或者如果你在每个之间实施2秒的延迟,你会看到3000秒,或者你的代码在50分钟内完成,你的配额中仍然会有剩余的电话在那24小时内。

我强烈建议建立24小时内接近2500限制的保护措施。