我有一个程序来调用API,返回JSON数据并将其写入CSV。 该程序循环访问实体列表作为API调用中的第一个参数,但现在还需要循环浏览第二个参数集(以开始和结束时间为起始时间),因为API最多可在一个参数集内提取一周的数据时间。
示例:
API调用:ex.com/api/entity/timecards?start_time=1531306800&end_time=1531846800&pretty=1
因此,我需要遍历所有实体,然后一次遍历一周的全年数据。
到目前为止,有关API调用函数的代码示例: def callAPI(entities):
for j in range(len(entities)):
locnum = entities[j][:5]
locnumv = entities[j]
startTime =
endTime =
url = "http://ex.com/api/entity/" + entity[j] + "/timecards?start_time=" + startTime + "&end_time=" + endTime
querystring = {"pretty":"1"}
headers = {
'Api-Key': ""
}
r = requests.request("GET", url, headers=headers, params=querystring)
d = r.json()
然后,程序继续将数据写入CSV中的行,在对带有静态时间参数的实体进行循环测试时,所有操作均成功。
所以我只需要弄清楚我将如何创建另一个嵌套的for循环来遍历开始时间/结束时间+ 518400秒(为了安全起见,请从6天而不是7天开始)并考虑超时,因为这有效都说完了,将有20,000多个API调用?
答案 0 :(得分:0)
首先,您可以这样做:
for entity in entities:
代替:
for j in range(len(entities)):
,然后使用entity
代替entities[j]
循环遍历您的时代。您必须设置开始时间,然后在另一个循环中将结束时间设置为start_time + 540000
:
start_time = 1531306800
i = 0
while True:
if i != 0:
start_time = end_time
end_time = start_time + 540000
url = "http://ex.com/api/entity/" + entity + "/timecards?start_time=" + start_time + "&end_time=" + end_time
querystring = {"pretty":"1"}
headers = {'Api-Key': ""}
try:
r = requests.request("GET", url, headers=headers, params=querystring)
except:
break
d = r.json()
基本上,您将遍历所有时期直到请求失败。完成后,您将退出循环并转到下一个实体。新实体的url将与之前的实体在同一时间开始,依此类推。
希望对您有帮助!
答案 1 :(得分:0)
首先,因为您只是使用 j 来获取当前实体,所以可以将onBind
替换为for j in range(len(entities))
,这样会更好。至于问题,您可以只使用内部for循环在每个星期内进行迭代。整个代码将是:
for entity in entities
希望这对您有帮助!