使用 Spotipy 将曲目添加到 Spotify 中的播放列表
Adding tracks to a playlist in Spotify using Spotipy
我正在使用 Spotify API 的 Python 绑定来列出艺术家的热门曲目并将它们添加到播放列表,但每次都失败,就好像它排除了不同的类型一样输入的。
New_Track_List 是一个包含热门曲目查找输出的字符串:
1:URI:
示例:“spotify:track:1pAyyxlkPuGnENdj4g7Y4f,spotify:track:7D2xaUXQ4DGY5JJAdM5mGP,spotify:track:74mG2xIxEUJwHckS0Co6jF,spotify:track:2rjqDPbLlbQRlcj8DVM9kn,
使用 URI,我从函数中取回了它
sp.user_playlist_add_tracks(username, playlist_id=playlist, tracks=New_Track_List)
回溯:
spotipy.client.SpotifyException: http status: 400, code:-1 - https://api.spotify.com/v1/users/smokieprofile/playlists/40aijTeKoxo5u1VSS9E3UQ/tracks: You can add a maximum of 100 tracks per request.
字符串中只有 20 首曲目。
第二次尝试:曲目 ID:
示例:“1pAyyxlkPuGnENdj4g7Y4f,7D2xaUXQ4DGY5JJAdM5mGP,74mG2xIxEUJwHckS0Co6jF,2rjqDPbLlbQRlcj8DVM9kn”
相同的回溯输出。
使用单个轨道 ID
sp.user_playlist_add_tracks(username, playlist_id=playlist, tracks="spotify:track:74mG2xIxEUJwHckS0Co6jF")
尝试只添加一首曲目时,收到此消息:
spotipy.client.SpotifyException: http status: 400, code:-1 - https://api.spotify.com/v1/users/smokieprofile/playlists/40aijTeKoxo5u1VSS9E3UQ/tracks: Invalid track uri: spotify:track:s
仅使用轨道 ID 的同一消息,就好像它只检查传递的字符串的第一个字母。
sp.user_playlist_add_tracks(username, playlist_id=playlist, tracks="7D2xaUXQ4DGY5JJAdM5mGP")
错误回溯:
spotipy.client.SpotifyException: http status: 400, code:-1 - https://api.spotify.com/v1/users/smokieprofile/playlists/40aijTeKoxo5u1VSS9E3UQ/tracks: Invalid track uri: spotify:track:7
这看起来像是鸭子输入 python 和 api 中错误消息的问题。我想 api 要求您发送一个列表而不是一个字符串,但实际上并没有检查它。问题是字符串也是可迭代的。
>>> tracks = "spotify:track:1pAyyxlkPuGnENdj4g7Y4f, spotify:track:7D2xaUXQ4DGY5JJAdM5mGP, spotify:track:74mG2xIxEUJwHckS0Co6jF, spotify:track:2rjqDPbLlbQRlcj8DVM9kn"
>>> len(tracks)
150
并且 api 实际上采用了轨道 ID 列表(不是逗号分隔的轨道 URI 字符串)并在所有 ID 前面添加 'spotify:track:':
>>> tracks = "spotify:track:74mG2xIxEUJwHckS0Co6jF"
>>> ["spotify:track:" + track for track in tracks][0]
'spotify:track:s'
因此,如果您改为给 api 一个轨道 ID 列表,它可能会起作用:
>>> tracks = ["1pAyyxlkPuGnENdj4g7Y4f", "7D2xaUXQ4DGY5JJAdM5mGP"]
>>> ["spotify:track:" + track for track in tracks][0]
'spotify:track:1pAyyxlkPuGnENdj4g7Y4f'
我正在使用 Spotify API 的 Python 绑定来列出艺术家的热门曲目并将它们添加到播放列表,但每次都失败,就好像它排除了不同的类型一样输入的。
New_Track_List 是一个包含热门曲目查找输出的字符串:
1:URI:
示例:“spotify:track:1pAyyxlkPuGnENdj4g7Y4f,spotify:track:7D2xaUXQ4DGY5JJAdM5mGP,spotify:track:74mG2xIxEUJwHckS0Co6jF,spotify:track:2rjqDPbLlbQRlcj8DVM9kn,
使用 URI,我从函数中取回了它
sp.user_playlist_add_tracks(username, playlist_id=playlist, tracks=New_Track_List)
回溯:
spotipy.client.SpotifyException: http status: 400, code:-1 - https://api.spotify.com/v1/users/smokieprofile/playlists/40aijTeKoxo5u1VSS9E3UQ/tracks: You can add a maximum of 100 tracks per request.
字符串中只有 20 首曲目。
第二次尝试:曲目 ID:
示例:“1pAyyxlkPuGnENdj4g7Y4f,7D2xaUXQ4DGY5JJAdM5mGP,74mG2xIxEUJwHckS0Co6jF,2rjqDPbLlbQRlcj8DVM9kn”
相同的回溯输出。
使用单个轨道 ID
sp.user_playlist_add_tracks(username, playlist_id=playlist, tracks="spotify:track:74mG2xIxEUJwHckS0Co6jF")
尝试只添加一首曲目时,收到此消息:
spotipy.client.SpotifyException: http status: 400, code:-1 - https://api.spotify.com/v1/users/smokieprofile/playlists/40aijTeKoxo5u1VSS9E3UQ/tracks: Invalid track uri: spotify:track:s
仅使用轨道 ID 的同一消息,就好像它只检查传递的字符串的第一个字母。
sp.user_playlist_add_tracks(username, playlist_id=playlist, tracks="7D2xaUXQ4DGY5JJAdM5mGP")
错误回溯:
spotipy.client.SpotifyException: http status: 400, code:-1 - https://api.spotify.com/v1/users/smokieprofile/playlists/40aijTeKoxo5u1VSS9E3UQ/tracks: Invalid track uri: spotify:track:7
这看起来像是鸭子输入 python 和 api 中错误消息的问题。我想 api 要求您发送一个列表而不是一个字符串,但实际上并没有检查它。问题是字符串也是可迭代的。
>>> tracks = "spotify:track:1pAyyxlkPuGnENdj4g7Y4f, spotify:track:7D2xaUXQ4DGY5JJAdM5mGP, spotify:track:74mG2xIxEUJwHckS0Co6jF, spotify:track:2rjqDPbLlbQRlcj8DVM9kn"
>>> len(tracks)
150
并且 api 实际上采用了轨道 ID 列表(不是逗号分隔的轨道 URI 字符串)并在所有 ID 前面添加 'spotify:track:':
>>> tracks = "spotify:track:74mG2xIxEUJwHckS0Co6jF"
>>> ["spotify:track:" + track for track in tracks][0]
'spotify:track:s'
因此,如果您改为给 api 一个轨道 ID 列表,它可能会起作用:
>>> tracks = ["1pAyyxlkPuGnENdj4g7Y4f", "7D2xaUXQ4DGY5JJAdM5mGP"]
>>> ["spotify:track:" + track for track in tracks][0]
'spotify:track:1pAyyxlkPuGnENdj4g7Y4f'