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

如何用Python通过YouTube API获取指定ChannelId全部视频并正确追加数据?

解决YouTube API批量获取视频数据的循环追加问题

我来帮你搞定这个问题!你的代码核心问题在于直接对API返回的字典对象使用append方法——因为r.json()返回的是字典类型,而append是列表专属的方法,所以肯定会报错。另外,你需要单独维护一个容器来存储所有视频条目,而不是直接修改原始的响应字典。

关键修改点:

  • 新建一个列表all_videos来统一存储所有请求返回的视频数据
  • 每次请求后,提取响应里的items字段(这才是真正的视频条目列表)追加到all_videos
  • 更新nextPageToken时,要从当前循环的新响应里获取,而不是最初的json_data

修正后的完整代码:

import requests
import json

mykey = 'myGoogleKey'
channelid = 'someRandomChannelId'

# 初始化空列表,用来存储所有视频数据
all_videos = []

# 第一次请求
r = requests.get(f"https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=50&channelId={channelid}&order=date&key={mykey}")
json_data = r.json()
# 将第一次请求的视频条目加入列表
all_videos.extend(json_data.get("items", []))
nextPageToken = json_data.get("nextPageToken")

# 循环获取剩余页面的数据
while nextPageToken:
    # 带pageToken的请求
    r = requests.get(f"https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=50&channelId={channelid}&order=date&key={mykey}&pageToken={nextPageToken}")
    current_data = r.json()
    # 追加当前页的视频条目
    all_videos.extend(current_data.get("items", []))
    # 更新nextPageToken,从当前响应里取
    nextPageToken = current_data.get("nextPageToken")

# 把所有视频数据写入文件,这里包装成和API响应类似的结构
output_data = {"items": all_videos}
with open('myJsonFile.json', 'w') as outfile:
    json.dump(output_data, outfile, sort_keys=True, indent=4)

print("All Done! 总共获取到", len(all_videos), "条视频数据")

额外说明:

  • 使用了f-string来拼接URL,比传统的字符串拼接更清晰易读
  • 用get("items", [])做了容错处理,如果API返回里没有items字段,会用空列表避免报错
  • 最后把列表包装成带items键的字典,和API原始响应结构一致,方便后续处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:09:19