如何通过Steam API获取CSGO击杀数等玩家统计数据
解决Steam API获取CSGO击杀数失败的问题
我来帮你排查并解决这个问题!你的代码主要有两个关键错误,导致无法正确拿到total_kills的数据:
1. JSON解析方式错误
你写的csgo_stats, = csgo.json()这行代码有问题——Steam API返回的JSON顶层是一个包含playerstats键的对象,不是可以直接解包的单元素结构,这行代码大概率会抛出ValueError。正确的做法是直接获取JSON对象,再提取playerstats。
2. 错误地将stats数组当作字典访问
返回数据里的stats是数组(列表),每个元素是包含name和value的对象,而不是键值对字典。你不能直接用['stats']['total_kills']来访问,必须遍历数组找到name为total_kills的项。
修正后的完整代码
import requests # 替换成你的实际API密钥和SteamID steam_api = "your_api_key_here" steamid = "target_steamid_here" # 发送API请求 csgo_response = requests.get( f"http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v2/?appid=730&key={steam_api}&steamid={steamid}" ) csgo_data = csgo_response.json() # 提取玩家统计数据,做容错处理 playerstats = csgo_data.get("playerstats") if not playerstats: print("无法获取玩家统计数据,请检查API密钥或SteamID是否正确") exit() # 遍历stats数组找到total_kills stats_list = playerstats.get("stats", []) total_kills = None for stat in stats_list: if stat.get("name") == "total_kills": total_kills = stat.get("value") break # 或者用更简洁的生成器表达式(效果一样) # total_kills = next((stat["value"] for stat in stats_list if stat["name"] == "total_kills"), None) if total_kills is not None: print(f"玩家总击杀数:{total_kills}") else: print("未找到total_kills统计项")
代码说明
- 用
get()方法替代直接索引,避免因为键不存在导致的KeyError,增加代码容错性 - 遍历
stats数组,匹配name字段来找到对应的击杀数值 - 加入了错误处理,比如API请求失败或者数据不存在的情况
内容的提问来源于stack exchange,提问作者THEMakci7m87




