如何在Disnake中实现API嵌套数据单条消息返回
解决Discord机器人拆分ETF行业权重消息的问题
你的问题出在循环内重复调用await ctx.send(),导致每条行业数据都单独发送成一条消息。只需先把所有行业信息整合为一个完整字符串,再一次性发送即可。
修改后的代码
@bot.command() async def sectorweight(ctx, etf): r = requests.get(url=f"https://financialmodelingprep.com/api/v3/etf-sector-weightings/{etf}?apikey={apikey}") data = r.json() # 用列表存储每条格式化后的行业信息 sector_details = [] for item in data: sector_name = item.get('sector') weight = item.get('weightPercentage') # 注意:API响应示例里是changesPercentage,请确认实际字段名 # 处理字段缺失的情况,避免显示None if sector_name and weight: sector_details.append(f"**{sector_name}**: {weight}") elif sector_name: sector_details.append(f"**{sector_name}**: 无权重数据") # 将所有内容合并为单条消息,添加标题提升可读性 full_message = f"**{etf} 行业权重分布**:\n" + "\n".join(sector_details) await ctx.send(full_message)
关键修改说明
- 用列表
sector_details收集所有行业的格式化文本,避免循环中多次调用发送接口 - 增加字段存在性判断,防止API返回字段缺失时出现
None的不友好显示 - 用
"\n".join()将列表内容拼接为带换行的完整字符串,一次发送完成 - 添加消息标题,让输出格式更清晰易读
注意事项
请确认API返回的权重字段名是否正确:你提供的API示例里是changesPercentage,但代码中用的是weightPercentage,需根据实际接口返回调整,否则会获取不到权重数据。
内容的提问来源于stack exchange,提问作者Charlie Vids
相关产品推荐
相关产品推荐

