【问题标题】:Big Foreach Loop with Google Maps API带有 Google Maps API 的大 Foreach 循环
【发布时间】:2012-12-07 03:39:45
【问题描述】:

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

目前我的 MySQL 表中有 1500 个数据集,我按“纬度 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']); $数据 = 数组( 'lat' => $geocode['lat'], 'lng' => $geocode['lon'] ); $where = array('company_id' => $item['company_id']); KM6_Addresses::updateGeoCode($data,$where); 结束;

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

也许有人可以帮助我。

谢谢! ;)

【问题讨论】:

  • 您是通过 Web 服务器运行它还是作为控制台脚本运行?您可能会遇到 php 时间限制。或者您的浏览器正在终止连接,因为它在时间限制内没有收到任何内容。

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


【解决方案1】:

您似乎已达到 API 配额。

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

我会考虑做以下事情。

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

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

请查看this 以查看同一行的其他回复。

-- 编辑--

那时我确实遇到了this

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

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

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

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

【讨论】:

  • 我不太确定。每天的限制是 2500。也不清楚超时是否与脚本执行或 API 有关。
猜你喜欢
  • 2011-08-23
  • 1970-01-01
  • 2011-03-14
  • 2015-06-16
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多