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

Spotipy中如何正确配置scope参数获取数据访问权限

问题核心

你的代码存在两个本质错误,导致scope配置不生效:

  • 你选用的SpotifyClientCredentials属于客户端凭证认证模式,仅能访问公开的Spotify资源(比如公开播放列表、公开曲目元数据),完全不支持用户权限scope配置,也无法访问任何和用户私人数据相关的接口。你调用的current_user_top_artists接口需要读取用户收听记录这类私有数据,必须走用户OAuth授权流程。
  • 代码语法存在错误:你先实例化了client_credentials_manager对象,后续又把这个对象当函数传入scope参数调用,写法本身不符合Spotipy的调用规范。
修正方案

把认证类替换为支持用户授权的SpotifyOAuth,scope参数直接在初始化认证管理器时传入即可,同时需要配置回调地址完成授权流程。另外你原来把用户top数据的接口写在了播放列表遍历循环里,会重复发起无效请求,需要移到循环外部。

修正后的可运行代码如下:

import spotipy
from spotipy.oauth2 import SpotifyOAuth

# 配置需要的权限范围
scope = 'user-top-read'

# 初始化Spotify客户端,走用户OAuth授权
sp = spotipy.Spotify(auth_manager=SpotifyOAuth(
    client_id='6b78bf9e892b4e8184c8e906885108bc',
    client_secret='3c2c0c7374374ab98062f342860369a5',
    redirect_uri='http://localhost:8888/callback',
    scope=scope
))

# 拉取用户中周期内收听量Top10的艺人,不要放在循环里重复调用
user_top_artists = sp.current_user_top_artists(limit=10, offset=0, time_range='medium_term')
print("收听量Top10艺人:")
for rank, artist in enumerate(user_top_artists['items'], start=1):
    print(f"{rank}. {artist['name']}")

# 如果要拉取Top10歌曲,直接调用对应接口即可
# user_top_tracks = sp.current_user_top_tracks(limit=10, offset=0, time_range='medium_term')

# 处理公开播放列表内容
playlist_link = "https://open.spotify.com/playlist/75bo0xrhJrSf0Gf0iqEPuS"
playlist_URI = playlist_link.split("/")[-1].split("?")[0]
playlist_items = sp.playlist_tracks(playlist_URI)["items"]

for track in playlist_items:
    track_uri = track["track"]["uri"]
    track_name = track["track"]["name"]
    print(f"播放列表曲目:{track_name}")
注意事项
  • 第一次运行代码会自动唤起浏览器跳转到Spotify授权页面,登录需要查询的账号并同意授权即可,授权token会自动缓存在本地,后续运行不需要重复登录。
  • 需要提前进入Spotify开发者后台,在对应应用的设置页把你代码里填的http://localhost:8888/callback添加到「Redirect URIs」列表中保存,否则会报重定向地址不匹配的错误。
  • 接口的time_range参数支持三个值:long_term(1年以上数据)、medium_term(近6个月数据,默认值)、short_term(近4周数据),可以根据需求自行调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:18:21