调用YouTube API向播放列表添加视频时偶发SERVICE_UNAVAILABLE错误求助
问题分析与解决方案
核心结论
这个错误是YouTube的服务端问题,不是你的代码问题。SERVICE_UNAVAILABLE明确表示YouTube API服务临时不可用,可能是服务负载过高、短时维护或网络链路波动导致的偶发故障。
代码小问题(非报错主因)
你的代码里有个语法笔误:playlistId': playlist_id 前面少了一个单引号,正确写法应该是 'playlistId': playlist_id。不过这个如果是实际运行的代码,会直接抛出语法错误,所以大概率是你粘贴时的疏漏,不是导致偶发409的原因。
修复方案:添加重试机制
针对这种临时服务不可用的情况,最佳实践是给请求添加指数退避重试逻辑——也就是每次失败后等待一段时间再重试,等待时间逐渐延长,避免持续请求加重服务端负担。
修改后的代码示例:
from googleapiclient.errors import HttpError import time def addSongToPlaylist(self, video_id, playlist_id): max_retries = 5 retry_delay = 1 # 初始等待1秒 for attempt in range(max_retries): try: request = self.youtube_service.playlistItems().insert( part="snippet", body={ 'snippet': { 'playlistId': playlist_id, 'resourceId': { 'kind': 'youtube#video', 'videoId': video_id } } } ) print(video_id) response = request.execute() return response except HttpError as e: # 检查是否是服务不可用的409错误 if e.resp.status == 409 and 'SERVICE_UNAVAILABLE' in str(e): if attempt == max_retries - 1: # 最后一次重试失败,抛出错误 raise e # 指数退避:等待时间翻倍 time.sleep(retry_delay) retry_delay *= 2 else: # 其他HttpError,直接抛出 raise e
补充说明
- 指数退避是Google官方推荐的处理API临时错误的方式,能有效提高请求成功率
- 如果重试后仍然频繁失败,可以检查自己的API请求配额是否充足(不过配额不足会是另一种错误码)
- 确保你的
youtube_service客户端配置正确,比如授权凭证有效
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

