Python获取Twitch符合条件的Minecraft主播display_name与viewers问题
解决Twitch Minecraft直播流筛选问题
嘿,别担心!新手遇到这种小问题太正常了,咱们一步步来解决~
错误原因分析
你之前的代码报错AttributeError: 'str' object has no attribute 'get',是因为data['streams'][0]['channel']是单个主播的频道字典,当你循环它的时候,实际上是在遍历字典的键名(都是字符串类型),所以变量x变成了字符串,自然没有get方法。
正确实现思路
我们需要:
- 遍历所有直播流数据(
data['streams']列表里的每个元素) - 筛选出两个条件都满足的流:
broadcast_platform字段值为live- 对应频道的
status字段(不区分大小写)包含skyblock或modded关键词
- 提取符合条件的流的
display_name(来自频道信息)和viewers字段 - 按观众数从多到少排序,取前5个
完整代码实现(带注释)
# 定义我们要匹配的关键词 target_keywords = ['skyblock', 'modded'] # 收集所有符合条件的直播流数据 qualified_streams = [] for stream in data['streams']: # 检查直播状态是否为live if stream.get('broadcast_platform') != 'live': continue # 获取频道的直播状态文本,转成小写,避免大小写匹配问题 channel_status = stream['channel'].get('status', '').lower() # 检查是否包含目标关键词 if any(keyword in channel_status for keyword in target_keywords): # 提取需要的字段并添加到列表 qualified_streams.append({ 'display_name': stream['channel']['display_name'], 'viewers': stream['viewers'] }) # 按观众数从多到少排序 qualified_streams.sort(key=lambda item: item['viewers'], reverse=True) # 取排名前5的主播 top5_streams = qualified_streams[:5] # 输出结果示例 for rank, stream in enumerate(top5_streams, start=1): print(f"第{rank}名: {stream['display_name']} - 观众数: {stream['viewers']}")
简洁版(列表推导式+排序)
如果你喜欢更紧凑的写法,也可以用拆分后的多行结构完成(更易读):
target_keywords = ['skyblock', 'modded'] top5_streams = sorted( [ { 'display_name': s['channel']['display_name'], 'viewers': s['viewers'] } for s in data['streams'] # 同时满足两个筛选条件 if s.get('broadcast_platform') == 'live' and any(k in s['channel'].get('status', '').lower() for k in target_keywords) ], key=lambda x: x['viewers'], reverse=True )[:5]
这样就能完美实现你的需求啦!刚开始处理JSON嵌套数据很容易搞混遍历的层级,多写几次就熟练了😉
内容的提问来源于stack exchange,提问作者oh hey
相关产品推荐
相关产品推荐

