Spotipy Client Credentials认证异常:无法获取公开播放列表曲目
问题解决:Spotipy Client Credentials认证失效及HTTP 400错误
核心错误点分析
认证代码语法错误
原代码中SpotifyClientCredentials的参数client_secret-secret误用减号-替代赋值符号=,这会导致Python解析错误,直接使认证管理器初始化失败,后续API调用自然无响应。Token认证方式的误用
手动调用get_access_token(cid)是错误操作,该方法无需传入cid参数,且Spotipy的client_credentials_manager会自动处理token的获取与刷新,手动干预容易导致Bearer token格式错误,触发HTTP 400提示。
修正后的完整代码
1. 正确的Client Credentials认证初始化
import spotipy from spotipy.oauth2 import SpotifyClientCredentials # 替换为你的真实CID和Client Secret cid = "YOUR_CLIENT_ID" secret = "YOUR_CLIENT_SECRET" # 修正参数赋值错误,移除不必要的requests_session参数(默认配置即可) client_credentials_manager = SpotifyClientCredentials(client_id=cid, client_secret=secret) sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
2. 完整获取播放列表曲目(含分页处理)
def fetch_all_playlist_tracks(playlist_link): # 从播放链接中提取ID(兼容网页链接和APP分享链接格式) playlist_id = playlist_link.split("/")[-1].split("?")[0] response = sp.playlist_tracks(playlist_id) track_items = response['items'] # 处理分页,获取所有曲目(默认单次返回20条数据) while response['next']: response = sp.next(response) track_items.extend(response['items']) return track_items try: print('getting in here') playlist_link = "YOUR_PUBLIC_PLAYLIST_LINK" all_tracks = fetch_all_playlist_tracks(playlist_link) # 示例:打印曲目名称和对应歌手 for track in all_tracks: track_info = track['track'] print(f"{track_info['name']} - {track_info['artists'][0]['name']}") except Exception as e: print(f"错误详情: {str(e)}")
额外注意事项
- 确保播放列表为公开状态:Client Credentials模式仅能访问公开数据,私有播放列表需使用Authorization Code Flow认证方式。
- 检查开发者应用状态:确认Spotify开发者后台的应用未被禁用,且CID/Secret未泄露或过期。
- 网络超时处理:若仍存在无响应问题,可在初始化
Spotify对象时添加超时参数:sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager, requests_timeout=15)
内容的提问来源于stack exchange,提问作者Valerie
相关产品推荐
相关产品推荐

