我最近遇到了一个问题,我有一个用户已登录的帐户的播放列表。
当我尝试使用 API 调用将曲目添加到播放列表时。我收到 201 响应代码和快照 ID,表明请求成功。
但是,当我检查实际播放列表时,播放列表每次都是空的,添加的歌曲不存在。
此外,我有一种方法可以验证歌曲是否在播放列表中,但这也不起作用。如果我能得到这方面的帮助,我将不胜感激。
这是有问题的代码和下面一些打印语句的结果,我会很感激一些帮助,我超级卡住了。
注意:其他部分正在工作,包括用户身份验证。这是代码的唯一问题。这是令牌中的范围: 范围=“用户读取私有用户读取电子邮件用户库读取播放列表修改公共播放列表修改私有”
代码:
def add_tracks_to_playlist(playlist_id, track_ids):
code = request.args.get("code")
token = session.get('token')
chunk_size = 100
if code and (not token or token_expired()):
token = get_token(code)
else:
if token_expired():
token = refresh_token()
session['token'] = token
sp = Spotify(auth = token)
for i in range(0, len(track_ids), chunk_size):
chunk = track_ids[i:i + chunk_size]
try:
print(f"Adding chunk to playlist {playlist_id}: {chunk}")
response = sp.playlist_add_items(playlist_id, chunk)
print(f"Successfully added chunk to playlist {playlist_id}")
print(f"response {response}")
except Exception as e:
print(f"Exception while adding tracks {chunk}: {e}")
return {"error": f"Exception while adding tracks: {str(e)}"}
# Verify the tracks have been added to the playlist
verify_playlist_contents(sp, playlist_id)
return {"success": "Tracks added to playlist successfully."}
def verify_playlist_contents(sp, playlist_id):
try:
playlist_tracks = sp.playlist_tracks(playlist_id)
print(f"Current tracks in playlist {playlist_id}:")
for item in playlist_tracks['items']:
track = item['track']
print(f"Track Name: {track['name']}, Track URI: {track['uri']}")
except Exception as e:
print(f"Error retrieving playlist tracks: {e}")`
打印语句: (请注意,这只是打印语句的一部分)
Adding chunk to playlist 7t5umVEr8HTvVZXPsgxQ49: ['spotify:track:5lMNphVhMLvhFmTWiKiLA2', 'spotify:track:7c0XG5cIJTrrAgEC3ULPiq']
Successfully added chunk to playlist 7t5umVEr8HTvVZXPsgxQ49
response {'snapshot_id': 'AAAAA1PsVniJis3Es2rOUa7nZCMqb87L'}
Current tracks in playlist 7t5umVEr8HTvVZXPsgxQ49:
Error retrieving playlist tracks: 'NoneType' object is not subscriptable
我已经尝试过使用普通请求 url 和 Spotipy 库,但这些解决方案都不起作用。
这个错误的主要原因似乎是 Spotify API 调用
sp.playlist_tracks(playlist_id)
返回了意外的响应,导致
'NoneType' object is not subscriptable
错误。 这意味着函数
sp.playlist_tracks(playlist_id)
返回的是
None
而不是预期的包含曲目信息的字典,而你的代码尝试将
None
当作字典来处理。
以下是一些可能的解决方法和调试步骤:
-
检查
sp.playlist_tracks()
的返回值: 打印playlist_tracks
变量本身,而不是playlist_tracks['items']
,确认返回值是不是None
。
print(f"Playlist tracks: {playlist_tracks}")
-
处理 API 调用失败的可能性:
Spotify API 调用有时可能会失败。在调用
sp.playlist_tracks(playlist_id)
后检查 HTTP 状态码,确保它是 200(成功)。
playlist_tracks = sp.playlist_tracks(playlist_id)
print(f"Status code: {playlist_tracks.status_code}")
if playlist_tracks.status_code == 200:
# 处理 playlist_tracks 的内容
else:
print(f"Error retrieving playlist tracks: {playlist_tracks.text}")
- 添加延迟: 在添加曲目和验证播放列表内容之间添加短暂延迟,以便 Spotify 服务器有时间更新播放列表。
import time
# ... your code ...
time.sleep(2) # 等待 2 秒
verify_playlist_contents(sp, playlist_id)
-
检查播放列表 ID 和范围: 确保你使用的播放列表 ID 正确无误,并且你的访问令牌具有修改播放列表的必要范围(
playlist-modify-private
或playlist-modify-public
)。 -
参考 Spotify API 文档: 查阅 Spotify Web API 文档 中有关
playlist_add_items
和playlist_tracks
端点的部分,以获取更多信息和示例。
通过遵循这些步骤,你可以调试代码并解决 Spotify API 调用的问题。
标签:python,spotify From: 78802514