我对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个数据集。
也许有人可以帮助我。
谢谢! ;)
答案 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限制的保护措施。