首页 > 编程问答 >Spotify 将项目添加到播放列表不起作用

Spotify 将项目添加到播放列表不起作用

时间:2024-07-28 05:52:01浏览次数:9  
标签:python spotify

我最近遇到了一个问题,我有一个用户已登录的帐户的播放列表。

当我尝试使用 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 当作字典来处理。

以下是一些可能的解决方法和调试步骤:

  1. 检查 sp.playlist_tracks() 的返回值: 打印 playlist_tracks 变量本身,而不是 playlist_tracks['items'] ,确认返回值是不是 None
print(f"Playlist tracks: {playlist_tracks}") 
  1. 处理 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}")
  1. 添加延迟: 在添加曲目和验证播放列表内容之间添加短暂延迟,以便 Spotify 服务器有时间更新播放列表。
import time

# ... your code ...

time.sleep(2)  # 等待 2 秒
verify_playlist_contents(sp, playlist_id)
  1. 检查播放列表 ID 和范围: 确保你使用的播放列表 ID 正确无误,并且你的访问令牌具有修改播放列表的必要范围( playlist-modify-private playlist-modify-public )。

  2. 参考 Spotify API 文档: 查阅 Spotify Web API 文档 中有关 playlist_add_items playlist_tracks 端点的部分,以获取更多信息和示例。

通过遵循这些步骤,你可以调试代码并解决 Spotify API 调用的问题。

标签:python,spotify
From: 78802514

相关文章

  • Python 中的“样板”代码?
    Google有一个Python教程,他们将样板代码描述为“不幸的”,并提供了以下示例:#!/usr/bin/python#importmodulesusedhere--sysisaverystandardoneimportsys#Gatherourcodeinamain()functiondefmain():print'Hellothere',sys.argv[1]#Command......
  • Python 3.9.1 中的 collections.abc.Callable 是否有 bug?
    Python3.9包含PEP585并弃用typing模块中的许多类型,转而支持collections.abc中的类型,现在它们支持__class_getitem__例如Callable就是这种情况。对我来说,typing.Callable和collections.abc.Ca......
  • 列表子类的 Python 类型
    我希望能够定义列表子类的内容必须是什么。该类如下所示。classA(list):def__init__(self):list.__init__(self)我想包含键入内容,以便发生以下情况。importtypingclassA(list:typing.List[str]):#Maybesomethinglikethisdef__init__(self):......
  • Python 中类型友好的委托
    考虑以下代码示例defsum(a:int,b:int):returna+bdefwrap(*args,**kwargs):#delegatetosumreturnsum(*args,**kwargs)该代码运行良好,只是类型提示丢失了。在Python中使用*args,**kwargs来实现​​委托模式是很常见的。如果有一种方法可......
  • 使用 python 支持构建自定义 vim 二进制文件
    背景Debian11vim软件包不包含python3支持。请参阅标题为“Debian11vim中不支持python-证据”的部分下面我需要vim支持python3YouCompleteMevim插件为了构建一个新的,我将vim9.0tarball下载到v......
  • 如何在Python 3.12+中正确使用泛型来提高代码质量?
    我正在尝试使用泛型来改进FastAPI应用程序中的类型注释。我有一个抽象存储库类,在其中使用泛型:fromabcimportABC,abstractmethodfromtypingimportListclassAbstractRepository[T](ABC):@abstractmethodasyncdefadd_one(self,data:dict)->T:......
  • python中的while循环不退出
    我试图完成第一年的python商业课程作业,但我的while循环无法退出,有人能帮忙吗?commisionTable=[{"admin_fee":100,"comm_rate":0.10},{"admin_fee":125,"comm_rate":0.12},{"admin_fee":150,"comm_rate":......
  • python---json文件写入
    ​ 使用到的知识点:os模块执行linux指令、json.dump()、withopenasf代码实现importsysimportosimportjson #向json文件file中添加内容data,其中data的类型为字典defwrite_json(file,data):    #如果文件存在,则删除    if(os.path.exists(fi......
  • python错题记录:布尔运算与逻辑值检测
    一前言环境:python3.10win10二布尔运算与逻辑值检测1案例案例1如上,在布尔运算时,有些时候代码只会运算前面的一部分,剩下的部分根本不会运算。以前在练习算法代码时,就利用这个规则来减少代码的工作量案例2如上,之前好长一段时间,上面的布尔运算总是让我感到困惑布尔运......
  • python---字典遍历
    1、三种常见的字典遍历实现defget_key_value(dics):  '''遍历所有键值对'''  forkey,valueindics.items():    print(f"{key}:{value}")defget_keys(dics):  '''遍历所有的键'''  forkeyindics......