如何使用 bash 脚本从多个轨迹中获取多个地址而不会出现错误?

如何使用 bash 脚本从多个轨迹中获取多个地址而不会出现错误?

我有很多轨迹数据。 50万。我尝试获取这些坐标的地址。我在linux下使用bash命令。

#!/bin/bash

filename="$1"

while  read -r line
do
uid=$(echo $line | cut -f1 -d,)
lat=$(echo $line | cut -f2 -d,)
long=$(echo $line | cut -f3 -d,)
timestamp=$(echo $line | cut -f4 -d,)
printf "$uid,$lat,$long,$timestamp|"
wget -O- -q "http://maps.google.com/maps/api/geocode/xml?latlng=$lat,$long&sensor=false"|\
      grep formatted_address|\
      head -n1|\
      cut -d\> -f2|\
      cut -d\< -f1
done < "$filename"

我只能得到2500个地址。 2500 坐标后,此命令“wget”不起作用。当我重置调制解调器时,我可以获得 2500 个以上的地址。有什么办法可以从坐标中获取地址吗?或者在获得 2500 地址后是否可以在 bash 命令中重置 IP?谢谢。

我的输入文件包含 500k 数据,就像 11395,39.9050283,32.6977617,2008-11-03T16:58:05Z 我的坐标39.9050283,32.6977617

我的输出文件将是这样的11395,39.9050283,32.6977617,2008-11-03T16:58:05Z|11395,39.9051033,32.6984550,2008-11-03T16:58:06Z|Erler, Eskişehir Yolu No:120, 06790 Etimesgut/Ankara, Turkey

答案1

发生的情况是 Google 正在限制您的 API 请求。他们让您通过免费服务获得的数据量是有限的。显然,在 2500 个请求之后,他们就切断了你的联系。当您“重置调制解调器”时,您显然会从 ISP 获得不同的 IP 地址,因此您可以在被阻止之前再发出 2500 个请求。

你需要重新考虑你的策略。对于 500k 请求,您可能需要为服务付费,或者从不同来源(例如 OpenStreetMap)获取数据。如果您从 OpenStreetMap 获取数据,请考虑虽然它是免费的,但他们仍然不会欣赏您在短时间内发出太多请求。如果你需要这么多数据,也许你应该下载一些数据库并进行本地查询。

相关内容