使用YouTube API批量添加视频到播放列表时遇SERVICE_UNAVAILABLE错误
我已经使用YouTube API客户端多日,成功实现单个视频添加到播放列表。现在尝试通过批量HTTP请求(new_batch_http_request())将多个视频批量添加到播放列表。我知道可以通过循环视频列表逐个发起请求,但之前看到有说法称批量请求可减少配额消耗,虽然有不同观点,但希望亲自验证。
问题在于执行批量请求时,仅1个视频成功添加,其余均返回异常:
return (<HttpError 409 when requesting https://youtube.googleapis.com/youtube/v3/playlistItems?part=snippet&alt=json returned "The operation was aborted.". Details: "[{'domain': 'youtube.CoreErrorDomain', 'reason': 'SERVICE_UNAVAILABLE'}]"> )
列表中总有一个视频能成功添加,但不一定是第一个或最后一个。
我使用的代码如下:
from googleapiclient.discovery import build from authentication import authenticate credentials = authenticate() playlist_id = "PAAqJtw5-yz3jRraaH13HlxhnjE4hw_wDu" # dummy ID video_ids = ["TWTX1T3yxzs", "1P1BSm_4FJg", "Pyx_FIYa7EE"] # dummy IDs youtube = build("youtube", "v3", credentials=credentials) batch_request = youtube.new_batch_http_request() def callback(request_id, response, exception): if exception is not None: print(f"Error adding video {request_id}: {exception}") else: video_id = response['snippet']['resourceId']['videoId'] print(f"Added video {video_id} to playlist {playlist_id}") for video_id in video_ids: req_body = {"snippet": {"playlistId": playlist_id, "resourceId": { "kind": "youtube#video", "videoId": video_id} }} request = youtube.playlistItems().insert(part="snippet", body=req_body) print(f"Adding video {video_id} to request...") batch_request.add(request, callback=callback) print("Executing request...") batch_request.execute()
我曾认为是配额问题,但已排除。我尝试查找该错误的相关信息但无果,不确定这是否是playlistItems().insert使用批量请求时的限制。
补充说明
- 已排除推荐的类似问题:相关问题针对的是配额错误,且场景为上传视频而非添加视频到播放列表,与我的问题不符。
- 配额验证:当前远低于每日10000次请求的配额限制,每次重新运行脚本都有一个视频成功添加,错误类型为
SERVICE_UNAVAILABLE而非配额相关错误;且逐个发起请求时无任何问题,配额报告显示未达限额。 - 批量请求配额消耗验证:重置配额后,发起包含3个API调用的单次批量请求,控制台显示消耗了150配额,与每个视频50的消耗一致;重复操作后,配额消耗正常累加,确认批量请求无法减少配额消耗。
尽管逐个循环发起请求可以正常工作且配额消耗一致,但批量请求仍是减少网络开销的优选方式,希望了解如何使其正常运行。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

