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

使用Spotify Web API开发歌曲推荐项目时遭遇403错误求助

Spotify歌曲推荐项目403 Forbidden错误排查

我正在开发一个Spotify歌曲推荐项目,调用audio_features接口时持续出现403错误,无法正常获取歌曲音频特征。以下是项目代码及报错信息:

项目代码

from dotenv import load_dotenv
import os
import spotipy
from spotipy.oauth2 import SpotifyOAuth
import pandas as pd

load_dotenv()

SPOTIPY_CLIENT_ID = os.getenv("SPOTIPY_CLIENT_ID")
SPOTIPY_CLIENT_SECRET = os.getenv("SPOTIPY_CLIENT_SECRET")
SPOTIPY_REDIRECT_URI = os.getenv("SPOTIPY_REDIRECT_URI")

scope = "user-library-read playlist-read-private"

sp = spotipy.Spotify(auth_manager=SpotifyOAuth(
    client_id=SPOTIPY_CLIENT_ID,
    client_secret=SPOTIPY_CLIENT_SECRET,
    redirect_uri=SPOTIPY_REDIRECT_URI,
    scope=scope
))

playlists = sp.current_user_playlists()

playlist_df = pd.DataFrame([
    {
        "name": pl["name"],
        "id": pl["id"],
        "track_count": pl["tracks"]["total"]
    }
    for pl in playlists["items"]
])

chosen_playlist = input("\n选择你想找相似歌曲的播放列表:\n")

playlist_id = None
while not playlist_id:
    for playlist in playlists['items']:
        if playlist['name'].lower() == chosen_playlist.lower():
            playlist_id = playlist['id']
            break
    if not playlist_id:
        print(f"\n未找到播放列表 '{chosen_playlist}'。")
        chosen_playlist = input("\n请重新选择你想找相似歌曲的播放列表:\n")

offset = 0
limit = 100
all_tracks = []
track_count = sp.playlist_tracks(playlist_id)['total']
c = 0

while offset < track_count:
    results = sp.playlist_tracks(playlist_id, offset=offset, limit=limit)
    tracks = results['items']
    print(f"\n播放列表 '{chosen_playlist}' 共有 {track_count} 首歌曲:")
    for item in tracks:
        c += 1
        all_tracks.append(item)
        track = item['track']
        print(f"{c}. {track['name']} - {track['artists'][0]['name']}")
    offset += limit

track_ids = [
    item['track']['id']
    for item in all_tracks
    if item['track'] and item['track']['id']
]

audio_features = sp.audio_features(track_ids)
filtered_features = [f for f in audio_features if f is not None]
df = pd.DataFrame(filtered_features)
print("\n歌曲音频特征:")
print(df)

报错信息

"C:\Users\kinga\PycharmProjects\Spotify Song Recommendation Chatbot.venv\Scripts\python.exe" "C:\Users\kinga\PycharmProjects\Spotify Song Recommendation Chatbot\main.py"

选择你想找相似歌曲的播放列表:
s2

播放列表 's2' 共有 2 首歌曲:
1. Rockabye (feat. Sean Paul & Anne-Marie) - Clean Bandit
2. No Lie - Sean Paul
HTTP Error for GET to https://api.spotify.com/v1/audio-features/?ids=2hrUO4drrO63i7FYbCLBl2,48QmG1dfvMuYLxMPt7KSRA with Params: {} returned 403 due to None
Traceback (most recent call last):
File "C:\Users\kinga\PycharmProjects\Spotify Song Recommendation Chatbot.venv\Lib\site-packages\spotipy\client.py", line 274, in _internal_call
response.raise_for_status()
File "C:\Users\kinga\PycharmProjects\Spotify Song Recommendation Chatbot.venv\Lib\site-packages\requests\models.py", line 1026, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://api.spotify.com/v1/audio-features/?ids=2hrUO4drrO63i7FYbCLBl2,48QmG1dfvMuYLxMPt7KSRA

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\kinga\PycharmProjects\Spotify Song Recommendation Chatbot\main.py", line 68, in 
audio_features = sp.audio_features(track_ids)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\kinga\PycharmProjects\Spotify Song Recommendation Chatbot.venv\Lib\site-packages\spotipy\client.py", line 1802, in audio_features
results = self._get("audio-features/?ids=" + ",".join(tlist))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\kinga\PycharmProjects\Spotify Song Recommendation Chatbot.venv\Lib\site-packages\spotipy\client.py", line 324, in _get
return self._internal_call("GET", url, payload, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\kinga\PycharmProjects\Spotify Song Recommendation Chatbot.venv\Lib\site-packages\spotipy\client.py", line 294, in _internal_call
raise SpotifyException(
spotipy.exceptions.SpotifyException: http status: 403, code: -1 - https://api.spotify.com/v1/audio-features/?ids=2hrUO4drrO63i7FYbCLBl2,48QmG1dfvMuYLxMPt7KSRA:
None, reason: None

Process finished with exit code 1

可能的解决方法

  • 检查权限范围:虽然获取音频特征无需特定用户权限,但建议补充权限范围并重新授权。更新scope为:

    scope = "user-library-read playlist-read-private user-read-playback-state"
    

    之后删除本地生成的.cache缓存文件,重新运行代码完成授权。

  • 核对Redirect URI:确保代码中SPOTIPY_REDIRECT_URI的值与Spotify开发者后台应用设置的完全一致,包括协议(http/https)、端口及结尾斜杠。

  • 重置授权缓存:删除本地的.cache文件,强制重新获取有效授权token。

  • 检查网络环境:确认网络可直接访问Spotify API,若处于受限网络环境,需调整网络设置。

  • 切换授权流程:由于音频特征属于公开数据,可改用Client Credentials Flow,无需用户授权和redirect URI:

    from spotipy.oauth2 import SpotifyClientCredentials
    
    sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials(
        client_id=SPOTIPY_CLIENT_ID,
        client_secret=SPOTIPY_CLIENT_SECRET
    ))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:54:54