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

Python整合Youtube API v3创建播放列表、搜索添加视频遇阻求助

解决YouTube API v3整合时获取playlistId与videoId的问题

嘿,我仔细看了你的代码和遇到的问题,发现几个关键的小细节出错了,导致你无法正确获取播放列表ID和视频ID,也没法把视频添加到播放列表里。咱们一步步来修正:

问题分析与修正点

1. 搜索视频时获取videoId的路径错误

你给出的搜索响应示例里,视频ID并不在顶层的response对象里,而是嵌套在items数组的每个元素的id字段下。你之前直接写vid=response['videoId']肯定找不到这个字段,正确的路径应该是:

  • 如果只取第一个搜索结果:response['items'][0]['id']['videoId']
  • 如果要处理所有搜索到的视频,需要遍历response['items']数组

2. 添加播放列表项的参数错误

你在调用playlistItems.insert时,有两个明显错误:

  • 把变量vid写成了字符串"vid",API会把这个当成视频ID,肯定找不到对应的视频
  • resourceId里多余写了playlistId,这个字段不需要,API会根据你传入的playlistId来关联播放列表

3. 缺失创建播放列表并获取playlistId的逻辑

你提到要整合创建播放列表的功能,但现有代码里没有这部分。调用playlists.insert后,返回的响应里的id字段就是你需要的playlistId,需要保存下来用于后续添加视频。

修改后的完整代码

import os
import google_auth_oauthlib.flow
import googleapiclient.discovery
import googleapiclient.errors

scopes = ["https://www.googleapis.com/auth/youtube.force-ssl"]

def main():
    # 本地运行时禁用HTTPS验证,生产环境一定要关掉!
    os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"

    api_service_name = "youtube"
    api_version = "v3"
    client_secrets_file = "client_secrets.json"

    # 获取凭证并创建API客户端
    flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
        client_secrets_file, scopes)
    credentials = flow.run_console()
    youtube = googleapiclient.discovery.build(
        api_service_name, api_version, credentials=credentials)

    # --------------------------
    # 1. 创建新的播放列表并获取playlistId
    # --------------------------
    request_create_playlist = youtube.playlists().insert(
        part="snippet,status",
        body={
            "snippet": {
                "title": "我的自定义播放列表",
                "description": "通过API创建的测试播放列表"
            },
            "status": {
                "privacyStatus": "private"  # 可选:public, private, unlisted
            }
        }
    )
    response_playlist = request_create_playlist.execute()
    playlist_id = response_playlist['id']  # 拿到新创建的播放列表ID
    print(f"成功创建播放列表,ID:{playlist_id}")

    # --------------------------
    # 2. 搜索自己频道内指定关键词的视频
    # --------------------------
    request_search = youtube.search().list(
        part="snippet",
        forMine=True,
        maxResults=50,
        order="date",
        q="searchcriteria",
        type="video"
    )
    response_search = request_search.execute()

    # 遍历搜索到的所有视频
    for item in response_search['items']:
        video_id = item['id']['videoId']
        print(f"找到符合条件的视频ID:{video_id}")

        # --------------------------
        # 3. 将视频添加到播放列表
        # --------------------------
        request_add_video = youtube.playlistItems().insert(
            part="snippet",
            body={
                "snippet": {
                    "playlistId": playlist_id,
                    "resourceId": {
                        "kind": "youtube#video",
                        "videoId": video_id  # 这里用变量,不是字符串!
                    },
                    "position": 0
                }
            }
        )
        response_add = request_add_video.execute()
        print(f"视频 {video_id} 已成功添加到播放列表,返回结果:{response_add}")

if __name__ == "__main__":
    main()

关键修改说明

  • 创建播放列表:新增了playlists.insert的调用,从返回的响应中提取id作为播放列表ID,后续添加视频时直接使用这个变量
  • 获取videoId:遍历搜索结果的items数组,每个item的id['videoId']才是正确的视频ID路径
  • 添加视频参数修正:把"videoId": "vid"改成"videoId": video_id,并移除了resourceId里多余的playlistId字段

这样修改后,整个流程就能正常跑通:创建播放列表→搜索视频→批量添加视频到播放列表啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:29:10