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

使用YouTube v3 API获取视频标题报错,求排查问题原因

问题描述

我写了一段Python脚本调用YouTube Data API v3获取视频信息,想测试只打印视频标题,但运行报错。脚本代码如下:

import sys, json, requests

vidCode = input('\nVideo Code Here: ')

url = requests.get(f'https://youtube.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics&id={vidCode}&key=(not sharing the api key, lol)')
text = url.text

data = json.loads(text)

if "kind" in data:
    print(f'Video URL: youtube.com/watch?v={vidCode}')
    print('Title: ', data['snippet.title'])
else:
    print("The video could not be found.\n")

测试发现,改成data['etag']能正常打印,但获取标题失败。我推测标题在JSON更深层级,试了data['items']能拿到数据但内容太乱,data['items.snippet.title']也不行,请问哪里错了?


问题根源与修复方案

问题出在你对YouTube Data API返回的JSON结构理解有误:

  • 接口返回的snippet并不是直接在根字典下,而是嵌套在items数组的第一个元素里(因为API支持一次查询多个视频ID,所以items是数组类型)
  • Python里不能像data['items.snippet.title']这样用.访问嵌套字典,而且items是数组,必须先取具体元素再访问字典键

修正后的代码

import sys, json, requests

vidCode = input('\nVideo Code Here: ')

url = requests.get(f'https://youtube.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics&id={vidCode}&key=(not sharing the api key, lol)')
text = url.text

data = json.loads(text)

# 检查是否有返回的视频条目,比判断根节点的kind更准确
if data.get('items'):
    # 取第一个(也是当前查询的唯一一个)视频条目
    video_data = data['items'][0]
    print(f'Video URL: youtube.com/watch?v={vidCode}')
    # 逐层访问嵌套的字典键
    print('Title: ', video_data['snippet']['title'])
else:
    print("The video could not be found.\n")

核心修改说明

  1. 判断逻辑优化:用data.get('items')替代"kind" in data,因为即使查询失败,根节点也可能存在kind字段,检查items是否非空才能准确判断是否拿到有效视频数据
  2. 正确的嵌套访问方式:先通过data['items'][0]获取单个视频的完整数据字典,再用video_data['snippet']['title']逐层访问标题,这是Python字典嵌套访问的标准写法
  3. 避免索引错误:先判断items是否存在,防止视频ID无效时触发数组索引越界错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:45:31