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

调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:42:15