如何用Python调用YouTube API逐个更新多视频/直播(通过ID列表)
YouTube API批量更新直播隐私状态的解决方案
原脚本的问题在于更新请求写在遍历循环的外面,只会处理循环结束后最后一个(或测试时的第一个)直播ID,要实现批量更新,必须把更新逻辑放到遍历每个直播ID的循环内部,逐个发起更新请求(因为YouTube API确实不支持批量更新)。
修正后的完整代码
from googleapiclient.discovery import build from googleapiclient.errors import HttpError def main(): # 假设credentials已通过授权流程正确获取 youtube = build('youtube', 'v3', credentials=credentials) # 分页获取所有直播ID,避免只处理前100条 next_page_token = None while True: # 发起直播列表查询,只请求ID字段减少数据量 list_request = youtube.liveBroadcasts().list( part="id", broadcastStatus="all", broadcastType="all", maxResults=100, pageToken=next_page_token ) try: list_response = list_request.execute() except HttpError as e: print(f"获取直播列表出错: {e}") break # 遍历当前页的每个直播,逐个更新隐私状态为未列出 for item in list_response["items"]: broadcast_id = item["id"] print(f"正在处理直播ID: {broadcast_id}") try: # 发起更新请求 update_request = youtube.liveBroadcasts().update( part="status", body={ "id": broadcast_id, "status": { "privacyStatus": "unlisted" } } ) update_result = update_request.execute() print(f"更新成功: {update_result['id']} 已设为未列出") except HttpError as e: print(f"更新直播 {broadcast_id} 失败: {e}") # 检查是否有下一页数据,没有则退出循环 next_page_token = list_response.get("nextPageToken") if not next_page_token: print("所有直播处理完成") break if __name__ == "__main__": main()
关键修改说明
- 移更新逻辑到循环内:把
liveBroadcasts().update()调用放到遍历直播项的循环里,每个ID单独发起请求,实现批量处理 - 分页处理:通过
nextPageToken循环获取所有直播,解决原脚本只能处理前100条的限制 - 优化请求字段:将列表查询的
part改为id,只获取必要数据,提升请求效率 - 异常捕获:添加
HttpError捕获,单个请求失败不会导致整个脚本崩溃,同时输出错误信息便于排查
内容的提问来源于stack exchange,提问作者Kostia
相关产品推荐
相关产品推荐

