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

Spotify定时搜索曲目时偶发HTTPError 401问题求助

解决方案:Spotify API 401 Unauthorized 问题排查与修复

可能的原因及对应修复方法

1. Token获取与刷新逻辑缺失

你的authorize()函数仅返回SpotifyOAuth对象,但未确保客户端能自动处理token过期刷新。Spotify Access Token有效期为1小时,若脚本单次运行时间较长,或初始化客户端时未绑定自动刷新逻辑,会导致部分请求因token失效触发401。

修复代码,让客户端自动处理token刷新:

def get_spotify_client():
    scope = 'playlist-modify-public'
    username = os.environ.get('SPOTIFY_USERNAME')
    client_id = os.environ.get('SPOTIPY_CLIENT_ID')
    client_secret = os.environ.get('SPOTIPY_CLIENT_SECRET')
    redirect_uri = os.environ.get('SPOTIPY_REDIRECT_URI')
    
    # 初始化OAuth管理器,开启token缓存与自动刷新
    auth_manager = SpotifyOAuth(
        client_id=client_id,
        client_secret=client_secret,
        redirect_uri=redirect_uri,
        scope=scope,
        username=username,
        cache_path=f".cache-{username}",
        show_dialog=False
    )
    
    # 绑定auth_manager的客户端会自动处理token过期刷新
    return spotipy.Spotify(auth_manager=auth_manager)

业务代码中调用方式:

spotifyObject = get_spotify_client()

for song in list_of_songs:
    time.sleep(0.5)
    result = spotifyObject.search(q=song, limit=5, offset=0, type='track', market='US')
    # 后续逻辑保持不变

2. 添加401异常重试机制

若自动刷新仍失效,可在业务代码中添加异常捕获,遇到401时强制重新获取token并重试:

def get_access_token():
    auth_manager = SpotifyOAuth(
        client_id=os.environ.get('SPOTIPY_CLIENT_ID'),
        client_secret=os.environ.get('SPOTIPY_CLIENT_SECRET'),
        redirect_uri=os.environ.get('SPOTIPY_REDIRECT_URI'),
        scope='playlist-modify-public',
        username=os.environ.get('SPOTIFY_USERNAME')
    )
    token_info = auth_manager.get_access_token()
    return token_info['access_token']

# 初始化客户端
spotifyObject = spotipy.Spotify(auth=get_access_token())

for song in list_of_songs:
    time.sleep(0.5)
    try:
        result = spotifyObject.search(q=song, limit=5, offset=0, type='track', market='US')
    except spotipy.exceptions.SpotifyException as e:
        if e.http_status == 401:
            # 重新获取token并重试请求
            spotifyObject = spotipy.Spotify(auth=get_access_token())
            result = spotifyObject.search(q=song, limit=5, offset=0, type='track', market='US')
        else:
            raise
    # 后续逻辑保持不变

3. 清理损坏的token缓存

Spotipy会生成.cache-<username>文件保存token信息,若文件损坏或存在过期token,会导致获取的token无效。直接删除该缓存文件,让脚本重新授权生成新token即可。

额外检查项

  • 确认环境变量SPOTIFY_USERNAME、SPOTIPY_CLIENT_ID等配置完全正确,无拼写错误或值缺失
  • 搜索接口无需额外scope,但需确保playlist-modify-public权限已正确配置在开发者后台

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:34:51