2016-12-13 4 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) 

두 디버그 인쇄() 다음 말해 S :

:

{'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"]} 

콘텐츠 유형 헤더에 언급 된 내용이 아니지만 재생 목록에서 노래를 삭제하는 다른 요청 (DELETE)이 작동하지만 URL을 사용하지 않아도 본문을 URL 인코딩해야한다고 생각할 수 있습니다. 부호화.

마지막 the documentation 다음과 같이 언급한다 :

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

[...]

Content-Type : URI를이 요청 본문에 전달되는 경우, 그렇지 않으면 무시 필요합니다. 요청 본문의 내용 유형 : application/json

[...]

uris : 스포티 파이 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}) (< =이 잘못된 것입니다).