尝试迭代python中的url面临消息错误

时间:2018-04-05 06:58:02

标签: python json api loops

我试图通过选择性地获取我获得的json数据输出并将其附加到列表中来从API获取数据。但是,我按照API的要求以YYYY-MM-DD格式迭代日期以获取数据

对于某些日期,我没有收到任何错误,但是消息。

{'generated_at': '2018-04-05T06:41:30+00:00',
 'message': 'No events scheduled for this date.',
 'schema': ''}

如何在try中将此作为异常传递,除了继续循环,因为它不是错误。

此外,我无法完全迭代日期和月份值,因为输入应该在MM和DD中,但在python3中我可以赋值= 0  比如

m = 03所以我必须将其指定为m = 3

d = 02所以我必须将它指定为只有d = 2

这是我的代码 - python3.5.2 - ubuntu 16.04 完整的代码

import requests
import json
import urllib.request
import pprint
m = 0
d = 0
g = []
final = []

for i in range(1,9,1):
    for j in range(1,9,1):
        m = i
        d = j


        url = "http://api.sportradar.us/cricket-t2/en/schedules/2017-0{0}-0{0}/schedule.json?api_key=vpkypw2wdypr2ujfmt8n526g".format(m,d)

        response = requests.request("GET",url)

        resp = response.json()

        a = resp['sport_events']
        s = []

   #looping through  json output received 
        for i in range(len(a)):
        s.append(a[i]['competitors'])
        gm = s[0]

        final.append(gm)

print(final)

我想知道如何迭代从01到31开始的所有数字,以及如何使用try和除了收到数据不存在的消息之外。

3 个答案:

答案 0 :(得分:1)

第一点:而不是盲目地假设成为" sport_events"键入响应数据,只需检查您的真实情况。你的resp变量是一个简单的python dict,api被广泛记录。

此外,你应该在try / except中包装请求(HTTP请求很容易失败.​​.....)并在response.json()调用之前检查响应状态代码(并在另一个try / except中包装此调用 - 即使在响应中使用200状态代码和应用程​​序/ json内容类型,也不能保证成功。

第二点:不要从整数和字符串格式构建日期,而是使用stdlib的datetime模块(或者像dateutil那样使用第三部分包装器)和strftime()调用将日期对象格式化为字符串。

作为旁注,这是:

for i in range(len(a)):
    s.append(a[i]['competitors'])

是无用的复杂写作方式:

for item in a:
    s.append(item['competitors'])

本身可以改写为:

s = [item["competitor"] for item in a]

但是我想知道为什么你只打算建立这个列表,因为你只使用它的第一个项目,所以你也可以替换它:

    s = []
   #looping through  json output received 
    for i in range(len(a)):
        s.append(a[i]['competitors'])
    gm = s[0]

使用:

    gm = a[0]["competitor"]

答案 1 :(得分:-1)

URL = “http://api.sportradar.us/cricket-t2/en/schedules/2017-0” + M + “-0” + d + “/schedule.json?api_key=vpkypw2wdypr2ujfmt8n526g”

应该有用。

答案 2 :(得分:-1)

或者您可以先将m转换为文本,然后根据数字添加0,然后连接到网址。