You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ESPN API遍历赛事详情仅返回首个event的技术求助

问题:ESPN API遍历赛事仅返回首个赛事数据

尝试使用ESPN API遍历赛事详情,但仅能返回第一个event,打印区域也只输出首个赛事的信息。

原实现代码

response = requests.get(JSON_URL)
json_data = response.json() 
game_status = []
home_team = []
home_score = []
away_team = []
away_score = []

for event in json_data['events']:
    if event['season']['type'] == 2:
        print(event['season']['type'],
              event['competitions'][0]['competitors'][0]['team']['abbreviation'],
              event['competitions'][0]['competitors'][0]['score'],
              event['competitions'][0]['competitors'][1]['team']['abbreviation'],
              event['competitions'][0]['competitors'][1]['score'],
              event['competitions'][0]['status']['type']['shortDetail'])
    

    for games in json_data['events']:
            home_team.append(games['competitions'][0]['competitors'][0]['team']['abbreviation'])
            home_score.append(games['competitions'][0]['competitors'][0]['score'])
            away_team.append(games['competitions'][0]['competitors'][1]['team']['abbreviation'])
            away_score.append(games['competitions'][0]['competitors'][1]['score'])
            game_status.append(games['competitions'][0]['status']['type']['shortDetail'])
    
    data = { 
       #'home_team':home_team,
       #'home_score': home_score,
       #'away_team': away_team,
       #'away_score': away_score,
       #'game_status': game_status,
       'seasontype' : 2,
       'scoreboard' : {'home_team': home_team, 'home_score': home_score, 'away_team': away_team , 'away_score': away_score , 'game_status': game_status}
    } 
   
    return jsonify(data)

if __name__ == "__main__":
    app.run(host='0.0.0.0')

当前返回结果

[18/Dec/2022 23:28:58] "GET / HTTP/1.1" 200 -
[{'name': 'ARI @ DEN', 'date': '2022-12-18T21:05Z', 'hometeam': 'DEN', 'homeid': '7', 'homescore': 24, 'awayteam': 'ARI', 'awayid': '22', 'awayscore': 15, 'down': None, 'spot': None, 'time': '0:00', 'quarter': 4, 'over': True, 'redzone': None, 'possession': None, 'state': 'post'}]

需求:遍历每个event并返回全部赛事数据,但目前仅列出第一场比赛。


问题原因
  1. 循环逻辑错误:外部for event循环内部嵌套了另一个遍历所有赛事的循环,且return语句放在外部循环的第一次迭代中,导致程序处理完第一个赛事就直接返回,后续赛事完全没处理。
  2. 未过滤赛事类型:内部循环没有判断season['type'] == 2,会把所有赛事都加入列表,不符合需求。

修复后的代码
response = requests.get(JSON_URL)
json_data = response.json() 
game_status = []
home_team = []
home_score = []
away_team = []
away_score = []

# 遍历所有赛事,仅处理赛季类型为2的赛事
for event in json_data['events']:
    if event['season']['type'] == 2:
        # 打印符合条件的赛事信息
        print(event['season']['type'],
              event['competitions'][0]['competitors'][0]['team']['abbreviation'],
              event['competitions'][0]['competitors'][0]['score'],
              event['competitions'][0]['competitors'][1]['team']['abbreviation'],
              event['competitions'][0]['competitors'][1]['score'],
              event['competitions'][0]['status']['type']['shortDetail'])
        
        # 收集符合条件的赛事数据
        home_team.append(event['competitions'][0]['competitors'][0]['team']['abbreviation'])
        home_score.append(event['competitions'][0]['competitors'][0]['score'])
        away_team.append(event['competitions'][0]['competitors'][1]['team']['abbreviation'])
        away_score.append(event['competitions'][0]['competitors'][1]['score'])
        game_status.append(event['competitions'][0]['status']['type']['shortDetail'])

# 所有赛事处理完成后再构造并返回数据
data = { 
    'seasontype' : 2,
    'scoreboard' : {
        'home_team': home_team, 
        'home_score': home_score, 
        'away_team': away_team, 
        'away_score': away_score, 
        'game_status': game_status
    }
} 

return jsonify(data)

if __name__ == "__main__":
    app.run(host='0.0.0.0')
修复说明
  • 移除内部冗余的赛事遍历循环,直接在外部循环中处理符合条件的赛事。
  • 将return jsonify(data)移到循环外部,确保所有符合条件的赛事都被处理完毕再返回结果。
  • 仅收集season['type'] == 2的赛事数据,匹配需求。

内容的提问来源于stack exchange,提问作者John Maestrale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:20:41