为什么在playlist_items() 中使用fields参数会返回空字典?

后端开发 2026-07-08

我正在尝试使用下面的代码从播放列表中提取曲目名称和艺术家信息(出于安全考虑,客户端凭据已被隐藏):

import spotipy
from spotipy.oauth2 import SpotifyOAuth
from pprint import pprint

sp = spotipy.Spotify(auth_manager=SpotifyOAuth(client_id="blank", client_secret="blank",
    redirect_uri="http://127.0.0.1:8888/callback", scope="user-library-read"))

ns6_uri = 'spotify:playlist:73CCgSZfERgYttjl8nOlDN'
offset = 0

while True:
    results = sp.playlist_items(ns6_uri, offset=offset, fields='items.track.name,items.track.artists,total')
    if len(results['items']) == 0:
        break

    print(results['items'])
    offset = offset + len(results['items'])
    print(offset, "/", results['total'])

代码只是返回一组空字典,例如 [ { }, { }, { }, { }, ...]

我试过在playlist_items( ) 函数中不使用fields参数,它能够准确返回播放列表中的所有曲目及其所有属性,所以我觉得可能和这个函数有关,但不确定。你有什么想法吗?

解决方案

我查看了Spotipy的代码,fields,并且大多数其他参数都 直接转发 给Spotify API,而不对它们进行修改(源代码中的 kwargs)。这意味着在这里可以从Spotify的文档中找到答案。

这是在 官方文档 中的描述:

点分隔符可用于指定非重复字段,而括号可用于在对象内指定重复字段。例如,要仅获取添加者的添加日期和用户ID: fields=items(added_at,added_by.id) 使用多个括号可以深入嵌套对象,例如: fields=items(track(name,href,album(name,href))) 字段可以通过在前面加感叹号来排除,例如: fields=items.track.album(!external_urls,images)

例子:fields=items(added_by.id,track(name,href,album(name,href)))

所以看起来你对于 fields 的语法好像错了。要获取曲名,似乎你需要 fields='items(track(name))'。我建议一次只处理一个字段,在确保字段的语法正确后再逐步添加更多。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章