【问题标题】:Spotify Web API - Error 400 with no body on playlist creationSpotify Web API - 错误 400,在创建播放列表时没有正文
【发布时间】: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


    【解决方案1】:

    播放列表创建请求停止出错,我不知道为什么。在尝试诊断问题时,我必须改变任何错误。我认为它正在尝试创建一个同名的播放列表,但 spotify 允许重复的播放列表。我使用的令牌或令牌对象可能有问题。对不起。

    但是,当前一个被清除时,我还发现了另一个问题:添加到轨道时,您指定轨道 uri (spotify:track:abcdef123) 而不仅仅是轨道 id (abcdef123)。我在下面修改了 spotify_write_playlists:

    def spotify_write_playlist(auth, name, tracks, public=True):
    ids = []
    for track in tracks:
        track_id = track.services['spotify']
        if track_id: ids.append("spotify:track:"+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
    

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 1970-01-01
      • 2019-11-03
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多