Spotipy使用异常:部分API方法正常调用,部分返回404错误
这种部分API能正常调用、另一部分却报404的情况确实挺让人挠头的,不过咱们可以一步步排查,先从几个常见的可能性入手:
1. 先排查Spotipy版本问题
旧版本的Spotipy偶尔会出现端点路径错误的bug,比如某些方法对应的API URL拼写有误。你可以先看看自己用的Spotipy版本:
pip show spotipy
如果版本低于2.20.0(或者更旧),强烈建议升级到最新版:
pip install --upgrade spotipy
升级后再试试调用sp.artist_related_artists(),很多时候这类问题都是版本兼容导致的。
2. 直接绕过Spotipy测试API端点
为了确认是Spotipy的问题还是Spotify API本身的问题,你可以用curl直接调用目标API端点:
首先,你需要获取一个有效的访问令牌(可以通过Spotify开发者控制台的"Get Token"按钮快速生成,或者用客户端凭证流获取),然后执行:
curl https://api.spotify.com/v1/artists/6olE6TJLqED3rqDCT0FyPh/related-artists -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
如果这个请求能正常返回相关艺人数据,那说明问题出在Spotipy的方法封装上,你可以直接用Spotipy的底层请求方法调用:
# 用Spotipy的底层_get方法直接调用API response = sp._get('https://api.spotify.com/v1/artists/6olE6TJLqED3rqDCT0FyPh/related-artists') print(response)
如果curl请求也返回404,那可能是临时的API区域限制——不过Nirvana是全球艺人,这种情况概率极低,你可以试试指定market参数(比如market="US")再调用。
3. 检查Spotipy的初始化方式
虽然你说认证没问题,但还是确认下你的Spotipy客户端初始化是否正确。如果是用客户端凭证流(适合访问公开数据),代码应该是这样的:
import spotipy from spotipy.oauth2 import SpotifyClientCredentials client_id = "你的客户端ID" client_secret = "你的客户端密钥" client_credentials_manager = SpotifyClientCredentials(client_id=client_id, client_secret=client_secret) sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
如果是用授权码流(针对用户私有数据),artist_related_artists属于公开数据,客户端凭证流完全足够,用授权码流反而可能因为scope设置问题导致意外错误。
4. 确认艺人ID的有效性
虽然你说ID正确,但还是可以再验证下:调用sp.artist('spotify:artist:6olE6TJLqED3rqDCT0FyPh'),如果能返回Nirvana的艺人信息,说明ID确实没问题,排除ID错误的可能。
按照这个顺序排查下来,大概率能找到问题所在——我遇到过好几次类似的情况,都是旧版Spotipy的方法封装bug导致的,升级后就解决了。
备注:内容来源于stack exchange,提问作者Tomas Tsangoulas

