2

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

目前我的 MySQL 表中有 1500 个数据集,我按“纬度为空”对它们进行排序。然后我想对它们进行 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']);
        $数据 = 数组(
            'lat' => $geocode['lat'],
            'lng' => $geocode['lon']

        );

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

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

也许有人可以帮助我。

谢谢!;)

4

1 回答 1

1

您似乎已达到 API 配额。

这是由给定日期内来自同一 IP 的过多请求或一段时间内过多的请求触发的。

我会考虑做以下事情。

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

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

检查内容以获取同一行的另一个响应。

- 编辑 -

我当时确实遇到过这个

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

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

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

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

于 2012-12-19T18:05:12.520 回答