我试图通过选择性地获取我获得的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和除了收到数据不存在的消息之外。
答案 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,然后连接到网址。