Spotipy artist(uid)等艺人相关函数无法工作问题求助
核心问题
用Spotipy调用artist(artist_id)、artist_albums(artist_id)、artist_top_tracks(artist_id)时要么失效要么代码卡住,就算用Spotify官方给的Pitbull艺人ID测试也没解决,但获取用户已保存曲目的功能完全正常。
可能原因及解决步骤
API权限没配全
虽然获取艺人基础信息不需要特殊权限,但还是得确认下你的Spotify开发者应用授权范围有没有问题。重新生成授权链接,确保授权时至少包含user-library-read,可以额外加上user-top-read试试,有时候权限不全会导致接口静默失败。Spotipy版本太旧
旧版本的Spotipy可能和Spotify新API不兼容,直接升级到最新版:pip install --upgrade spotipy请求超时没处理
代码卡住大概率是请求超时但没设置超时时间,给Spotipy客户端加个超时参数,超时就抛出异常,不会一直卡着:sp = spotipy.Spotify(auth_manager=SpotifyOAuth(...), requests_timeout=10, retries=3)触发API限流
Spotify API有调用频率限制,连续刷艺人接口容易触发限流。可以在调用前加个短延迟:import time time.sleep(1) artist = sp.artist(artist_id)新版本Spotipy会自动处理重试,但手动加延迟更稳。
艺人ID格式不对
确认ID是完整的字符串,比如Pitbull的ID是3Mr4K520909P9qM5J405eL,别带空格或多余字符。直接用这个ID跑测试:test_id = "3Mr4K520909P9qM5J405eL" artist = sp.artist(test_id) print(artist)开调试日志看细节
开启Spotipy的调试模式,能看到请求的URL、状态码这些,快速定位问题:sp = spotipy.Spotify(auth_manager=SpotifyOAuth(...)) sp.trace = True # 打开调试日志 artist = sp.artist(artist_id)
最小测试脚本
写个独立的测试脚本,排除原有代码的干扰:
import spotipy from spotipy.oauth2 import SpotifyOAuth # 替换成你的开发者信息 CLIENT_ID = "你的客户端ID" CLIENT_SECRET = "你的客户端密钥" REDIRECT_URI = "http://localhost:8080/callback" sp = spotipy.Spotify(auth_manager=SpotifyOAuth( client_id=CLIENT_ID, client_secret=CLIENT_SECRET, redirect_uri=REDIRECT_URI, scope="user-library-read" )) # 测试Pitbull的艺人ID test_artist_id = "3Mr4K520909P9qM5J405eL" try: artist = sp.artist(test_artist_id) print(f"艺人名称:{artist['name']}") albums = sp.artist_albums(test_artist_id, limit=3) print(f"前3张专辑:{[album['name'] for album in albums['items']]}") top_tracks = sp.artist_top_tracks(test_artist_id, country="US") print(f"热门曲目:{[track['name'] for track in top_tracks['tracks']]}") except Exception as e: print(f"错误信息:{str(e)}")
如果这个脚本能跑通,说明问题在你原有代码的其他部分;如果还是不行,那基本是环境或权限的问题。
内容的提问来源于stack exchange,提问作者Aseda

