2016-12-13 17 views
0

プレイリストに一括して曲を追加しようとしています。私の人生はAPIのドキュメントと私が送信しているものとの違いを見つけることはできませんが、とにかくエラーです。ここで私が使用している関数であり、私はそれを呼んでいる方法:Spotify API:プレイリストにトラックを追加する:JSONの解析エラー

def addToPlaylist(songs, playlistUrl, positions = None): 
    data = { 'uris': songs } 
    if position != None: 
     data.update({ 'position': position }) 

    headers = authHeader.copy() 
    headers.update({'Content-Type': 'application/json'}) 
    print(headers) 
    print(json.dumps(data)) 

    req = requests.post(playlistUrl, headers = headers, data = json.dumps(data)) 
    if req.status_code != 201: 
     print('Error: Request returned status code {}. Returned: {}'.format(req.status_code, req.text)) 

songs = ["spotify:track:1i1fxkWeaMmKEB4T7zqbzK", "spotify:track:2VKqMKKCFhTPczQb10TMKB", "spotify:track:7Gl9cKtVjRN6KHNMfV1gD3"] 
url = "https://api.spotify.com/v1/users/username/playlists/2...Q/tracks" 
addToPlaylist(songs, url, 0) 

2枚のデバッグプリント()以下を教えてよ:

{'Accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': 'Bearer BlahblahblA'} 
{"position": 0, "uris": ["spotify:track:1i1fxkWeaMmKEB4T7zqbzK", "spotify:track:2VKqMKKCFhTPczQb10TMKB", "spotify:track:7Gl9cKtVjRN6KHNMfV1gD3"]} 

エラー出力が私にこのことを伝えます

Error: Request returned status code 400. Returned: { 
    "error" : { 
    "status" : 400, 
    "message" : "Error parsing JSON." 
    } 
} 

http://localhost:3001にURLを変更し、netcatをnc -l -p 3001で聴いたとき、私は次のリクエスト見ることができます:

POST/HTTP/1.1 
Host: 0:3001 
Accept: application/json 
Connection: keep-alive 
User-Agent: python-requests/2.11.1 
Accept-Encoding: gzip, deflate 
Content-Type: application/json 
Authorization: Bearer BlahblahblA 
Content-Length: 145 

{"position": 0, "uris": ["spotify:track:1i1fxkWeaMmKEB4T7zqbzK", "spotify:track:2VKqMKKCFhTPczQb10TMKB", "spotify:track:7Gl9cKtVjRN6KHNMfV1gD3"]} 

Content-Typeヘッダーには言及していませんが、別のリクエスト(再生リストから曲を削除するためのDELETE)が機能していて、そこにURLを使用していないにもかかわらず、エンコーディング。

最後にthe documentation次のように言及している:

POST https://api.spotify.com/v1/users/{user_id}/playlists/{playlist_id}/tracks 

[...]

Content-Type:URIはリクエストボディに渡された場合以外の場合は無視、必須。リクエストボディのコンテンツタイプ:application/json

[...]

uris:SpotifyはURI文字列の配列|オプション。追加するSpotifyトラックURIのJSON配列。例: {"uris": ["spotify:track:4iV5W9uYEdYUVa79Axb7Rh", "spotify:track:1301WleyT98MSxVHPZCA6M"]}

私は何か間違っていますか?

答えて

0

この記事を書いているうちに、positionパラメータはリクエスト本文に含まれていないと私は注意していました。これはURIパラメータ内になければなりません。これを試して、それは動作します。

Spotifyのエラーは、JSONが「未知のパラメータ」などではなく、解析できないと主張していました。これには完全に時間がかかりました。

これは動作します:

if position != None: 
    playlistUrl += '?position=' + str(position) 

代わりのdata.update({ 'position': position})(< =これは間違っています)。

関連する問題