You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Python批量更新YouTube播放列表中所有视频的描述?

嘿,别慌!你已经搞定了最关键的第一步(拿到client_secrets.json),接下来咱们一步步把代码补全,让它能真正更新你播放列表里所有视频的描述。

首先得说清楚:你之前复制的playlists.update代码是用来修改播放列表本身的信息(比如播放列表标题、描述)的,不是用来改里面视频的描述的!咱们需要换用videos.update接口,还要先把播放列表里的所有视频ID捞出来,再逐个更新。

第一步:安装必要的Python依赖

先确保你装了Google的官方客户端库,打开终端跑这个命令:

pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib
第二步:完整代码实现

我给你写了一套完整的流程代码,你只需要替换几个参数就能用:

import os
import google.auth
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

# ---------------------- 替换这里的参数 ----------------------
SCOPES = ["https://www.googleapis.com/auth/youtube.force-ssl"]
PLAYLIST_ID = "你的测试播放列表ID"  # 从播放列表URL里取,比如list=后面的字符串
NEW_DESCRIPTION = "这是你想要的新描述内容"
# ----------------------------------------------------------

def get_authenticated_service():
    creds = None
    # token.json会自动保存你的授权凭据,下次运行不用再登录
    if os.path.exists("token.json"):
        creds = Credentials.from_authorized_user_file("token.json", SCOPES)
    # 处理凭据过期或未授权的情况
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            # 弹出浏览器让你登录授权
            flow = InstalledAppFlow.from_client_secrets_file(
                "client_secrets.json", SCOPES
            )
            creds = flow.run_local_server(port=0)
        # 保存凭据到本地
        with open("token.json", "w") as token:
            token.write(creds.to_json())
    return build("youtube", "v3", credentials=creds)

def get_playlist_video_ids(youtube, playlist_id):
    video_ids = []
    next_page_token = None
    # 循环获取所有视频(因为API每次最多返回50条)
    while True:
        request = youtube.playlistItems().list(
            part="contentDetails",
            playlistId=playlist_id,
            maxResults=50,
            pageToken=next_page_token
        )
        response = request.execute()
        # 提取每个视频的ID
        for item in response["items"]:
            video_ids.append(item["contentDetails"]["videoId"])
        next_page_token = response.get("nextPageToken")
        if not next_page_token:
            break
    return video_ids

def update_video_description(youtube, video_id, new_description):
    try:
        # 先获取视频当前的snippet信息(API要求更新时必须传全必填字段,不能只改描述)
        request = youtube.videos().list(
            part="snippet",
            id=video_id
        )
        response = request.execute()
        snippet = response["items"][0]["snippet"]
        # 更新描述字段
        snippet["description"] = new_description
        # 发送更新请求
        update_request = youtube.videos().update(
            part="snippet",
            body={
                "id": video_id,
                "snippet": snippet
            }
        )
        update_request.execute()
        print(f✅ 成功更新视频 {video_id} 的描述")
    except HttpError as e:
        print(f❌ 更新视频 {video_id} 时出错: {e}")

if __name__ == "__main__":
    # 初始化授权后的YouTube服务
    youtube = get_authenticated_service()
    # 获取播放列表里所有视频的ID
    video_ids = get_playlist_video_ids(youtube, PLAYLIST_ID)
    print(f"\n找到 {len(video_ids)} 个视频,开始更新描述...\n")
    # 逐个更新视频描述
    for video_id in video_ids:
        update_video_description(youtube, video_id, NEW_DESCRIPTION)
    print("\n🎉 所有视频描述更新完成!")
第三步:运行代码的注意事项
  • 一定要把代码里的PLAYLIST_ID换成你自己的测试播放列表ID(从播放列表URL里的list=后面提取)
  • NEW_DESCRIPTION改成你想要的新描述内容
  • 首次运行时,会自动弹出浏览器让你登录Google账号授权,确保你登录的是拥有这个播放列表和视频的账号
  • 如果之后修改了权限范围,需要删除生成的token.json文件,重新授权
补充说明

为什么不用你之前复制的playlists.update
那个接口是用来修改播放列表本身的属性(比如播放列表的标题、封面、描述)的,根本碰不到里面的视频内容。要改视频描述,必须先拿到每个视频的ID,再用videos.update接口逐个修改——这就是咱们代码里做的事儿。

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

火山引擎 最新活动