php - 使用 Google Maps API 的大 Foreach 循环

标签 php mysql google-maps-api-3

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

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

但是: 在大约 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 个数据集。

也许有人可以帮助我。

谢谢! ;)

最佳答案

您似乎已达到 API 配额。

这是由于在给定的一天或一段时间内来自同一 IP 的请求过多而触发的。

我会考虑执行以下操作。

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

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

检查 this出同一行的另一个响应。

-- 编辑--

我确实遇到了this那么。

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

也许考虑做类似的事情,在每个 ForEach 之间应用 2 秒的延迟,或者循环直到达到限制,休眠 (2),然后恢复,看看是否可行。

重要的是您不想被列入黑名单。 您需要在 10-30 秒内跑完所有 1500 次吗?或者,如果您在每个调用之间实现 2 秒的延迟,那么您将看到 3000 秒,或者您的代码将在 50 分钟内完成,而您在这 24 小时内的配额中仍有 1,000 次调用。

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

关于php - 使用 Google Maps API 的大 Foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13958270/

相关文章:

javascript - 将 Google map 中的多边形边界居中

python - Django - 将 js 变量传递给 Django View

php - 如何使用 token_get_all() 查找范围级别?

PHP/MySQL 向表中插入多行

php - 允许缓存 image.php,直到源已更改

c# - 删除被调用的查询异常 C#

mysql - sql在执行group by之前显示总数

javascript - 谷歌地图 带有多个标记的多个 map

php - 编码冲突: php output corrupted by html <head> content

php - 尝试链接填充的下拉列表 PHP