我对 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/