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

修改Discord Bot代码以支持YouTube视频链接提取频道信息

解决YouTube视频链接的频道信息提取问题

问题原因

视频页面的JSON结构和频道页面完全不同,你之前用的subscribeButton路径在视频页面的JSON里不存在,因此抛出KeyError。

正确解析路径

从你提供的视频页面JSON数据中,频道信息位于videoSecondaryInfoRenderer下的videoOwnerRenderer节点内,具体提取路径如下:

  • 频道ID:找到json_data["contents"]["twoColumnWatchNextResults"]["results"]["results"]["contents"]中包含videoSecondaryInfoRenderer的项,再取videoSecondaryInfoRenderer["owner"]["videoOwnerRenderer"]["channelId"]
  • 频道名称:videoSecondaryInfoRenderer["owner"]["videoOwnerRenderer"]["title"]["runs"][0]["text"]
  • 频道Logo:videoSecondaryInfoRenderer["owner"]["videoOwnerRenderer"]["thumbnail"]["thumbnails"][-1]["url"](取最后一个元素可获取最高清的Logo)

鲁棒性代码实现

JSON中contents的索引可能发生变动,直接用固定索引易出错,建议遍历列表定位目标节点:

def extract_channel_info_from_video(json_data):
    # 遍历视频页面的contents列表,定位videoSecondaryInfoRenderer
    contents = json_data["contents"]["twoColumnWatchNextResults"]["results"]["results"]["contents"]
    for item in contents:
        if "videoSecondaryInfoRenderer" in item:
            owner_renderer = item["videoSecondaryInfoRenderer"]["owner"]["videoOwnerRenderer"]
            # 提取核心信息
            channel_id = owner_renderer["channelId"]
            channel_name = owner_renderer["title"]["runs"][0]["text"]
            channel_logo = owner_renderer["thumbnail"]["thumbnails"][-1]["url"]
            return {
                "channel_id": channel_id,
                "channel_name": channel_name,
                "channel_logo": channel_logo
            }
    return None  # 未找到目标节点时返回None

补充说明

如果你的Bot需要同时处理频道链接和视频链接,可以添加链接类型判断逻辑:通过检查链接是否包含/channel/、/c/或watch?v=来区分,再选择对应的解析路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:30:43