【发布时间】:2018-08-05 18:38:12
【问题描述】:
我正在尝试使用 Spotify Web API 创建和填充播放列表。我正在关注this 官方参考资料,并且我正在使用 Python 3 和 requests 模块。这是我的代码:
def spotify_write_playlist(auth, name, tracks, public=True):
ids = []
for track in tracks:
track_id = track.services['spotify']
if track_id: ids.append(track_id)
headers = {
"authorization":"Bearer " + auth.token,
"content-type":"application/json"
}
data = {
"name":name,
"public":public
}
r = makeRequest("https://api.spotify.com/v1/users/" + auth.username + "/playlists", "post", 201, json=data, headers=headers)
playlist_id = json.loads(r.content)['id']
data = {"uris":ids}
r = makeRequest("https://api.spotify.com/v1/users/" + auth.username + "/playlists/" + playlist_id + "/tracks", "post", 201, json=data, headers=headers)
return playlist_id
def makeRequest(url, method="get", expectedCode=200, *args, **kwargs):
while True:
r = requests.request(method, url, **kwargs)
if r.status_code == 429:
time.sleep(TMR_DELAY)
continue
elif r.status_code == expectedCode:
return r
else:
if "spotify.com" in url:
raise spotify.ApiError(r.status_code, expectedCode, r.content)
else:
raise youtube.ApiError(r.status_code, expectedCode, r.content)
makeRequest 函数是处理速率限制的 requests.request 的包装器。
上面的代码在使用一堆示例轨道运行时在第一次调用 makeRequest 时返回错误 400,因此我的示例轨道不会是问题,因为该调用只涉及名称和公共变量。
错误响应没有正文,因此没有错误描述。这表明我可能遗漏了一些非常明显的东西。有人可以帮忙吗?
【问题讨论】:
标签: python python-3.x python-requests spotify