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

调用Spotify API获取用户热门歌曲时返回403错误求助

Spotify API获取用户热门歌曲返回403错误的解决方法

你的代码返回403 Forbidden错误,核心问题是授权模式错误,同时存在几处代码细节问题,具体原因和修正方案如下:

核心错误原因

你使用了client_credentials(客户端凭证)授权模式,这种模式仅能访问Spotify的公开数据(如公开专辑、歌手信息),无法访问用户私有数据(如用户的热门歌曲、个人播放列表)。访问/me/top/tracks这类接口需要带用户上下文的授权令牌,必须使用授权码模式(Authorization Code Flow),同时申请对应的权限。

遗漏的配置与步骤

1. 配置重定向URI

在Spotify开发者控制台的应用设置中,添加一个重定向URI(比如http://localhost:8080/callback),该URI用于用户授权后接收授权码。

2. 申请必要权限

访问用户热门歌曲需要user-top-read权限,在引导用户授权时必须包含该权限。

3. 切换到授权码模式获取令牌

替换原有的client_credentials模式,改用授权码模式获取包含用户上下文的access token。

修正后的代码示例

import requests
import base64
import json

# 替换成你的客户端ID和密钥
CLIENT_ID = "你的Client ID"
CLIENT_SECRET = "你的Client Secret"

def get_token_with_auth_code(auth_code, redirect_uri):
    auth_string = CLIENT_ID + ":" + CLIENT_SECRET
    auth_bytes = auth_string.encode("utf-8")
    auth_base64 = str(base64.b64encode(auth_bytes), "utf-8")

    url = "https://accounts.spotify.com/api/token"
    headers = {
        "Authorization": "Basic " + auth_base64,
        "Content-Type": "application/x-www-form-urlencoded"
    } 

    data = {
        "grant_type": "authorization_code",
        "code": auth_code,
        "redirect_uri": redirect_uri
    }
    result = requests.post(url, headers=headers, data=data)
    json_result = json.loads(result.content)
    return json_result

def get_top_tracks(token):
    query_url = "https://api.spotify.com/v1/me/top/tracks"
    headers = {
        "Authorization": "Bearer " + token
    }
    result = requests.get(query_url, headers=headers)
    # 打印返回的JSON数据,便于查看结果
    print(result.json())

# 步骤1:先手动访问以下URL获取授权码(替换参数)
# https://accounts.spotify.com/authorize?client_id=你的Client ID&response_type=code&redirect_uri=http://localhost:8080/callback&scope=user-top-read

# 步骤2:把获取到的授权码和重定向URI填入
AUTH_CODE = "你从回调中得到的授权码"
REDIRECT_URI = "http://localhost:8080/callback"

token_data = get_token_with_auth_code(AUTH_CODE, REDIRECT_URI)
access_token = token_data["access_token"]
get_top_tracks(access_token)

额外代码问题修正

  • 原代码最后一行get_top_tracks(myToken)变量名错误,应对应前面的token变量,且需要提取access_token字段
  • 原get_top_tracks函数打印的是响应对象,改为print(result.json())可以查看具体返回内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:05:23