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

使用Spotipy添加指定歌手歌曲至Spotify播放列表的异常问题

问题解决:Spotipy搜索Adele时混入非目标歌手歌曲

问题根源

  1. 搜索查询格式错误:你当前的查询用逗号分隔artist: {top_artist_name}, track: {top_songs[i]},不符合Spotify搜索API的语法规范——逗号会被当作搜索词的一部分,导致artist过滤条件失效,搜索结果会包含其他歌手的同名歌曲。
  2. 未验证结果匹配性:直接取搜索结果的第一个条目,没有检查该歌曲的实际艺术家是否与目标一致,遇到翻唱、同名歌曲时就会出错。

修正后的代码

def get_songs_uris(self, top_artist_name, top_songs):
    for song_title in top_songs:
        # 使用Spotify标准搜索语法,双引号包裹避免空格干扰,无多余逗号
        query = f'artist:"{top_artist_name}" track:"{song_title}"'
        songs_data = self.sp.search(q=query, type="track", limit=5)
        
        # 遍历搜索结果,找到真正属于目标歌手的歌曲
        for track in songs_data["tracks"]["items"]:
            # 检查歌曲的艺术家是否包含目标歌手(兼容合作单曲场景)
            for artist in track["artists"]:
                if artist["name"].lower() == top_artist_name.lower():
                    self.songs_URIs.append(track["uri"])
                    break
            else:
                continue  # 没找到匹配的艺术家,继续下一个结果
            break  # 找到匹配的歌曲,跳出循环处理下一首
        else:
            # 没有找到匹配的歌曲,可添加日志提示
            print(f"未找到歌手 {top_artist_name} 的歌曲 {song_title}")
    return self.songs_URIs

关键改进点

  • 规范搜索语法:用artist:"歌手名" track:"歌曲名"的格式,确保Spotify正确解析过滤条件,精准定位目标歌曲。
  • 结果验证:遍历搜索结果,检查每首歌的艺术家列表,确保包含目标歌手(兼容合作单曲场景),避免混入翻唱或同名歌曲。
  • 容错处理:添加未找到歌曲的提示,避免因搜索结果为空导致索引错误。

内容的提问来源于stack exchange,提问作者Łukasz Pawlik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:57:09