在API调用中使用多个参数时,Python中的嵌套循环

时间:2018-12-12 19:20:21

标签: python json python-3.x api for-loop

我有一个程序来调用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调用?

2 个答案:

答案 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

希望这对您有帮助!