Python - API Spotify возвращает ошибку 400 «Неправильный JSON» - PullRequest
1 голос
/ 23 октября 2019

Heyo. В свободное время я пытаюсь создать небольшое приложение, использующее API Spotify. Мне удалось заставить мою программу использовать oAuth 2, чтобы позволить пользователю авторизовать мое приложение для манипулирования их Spotify, но я столкнулся с проблемой с определенной конечной точкой в ​​Spotify API.

Конечная точка, с которой у меня возникли проблемы: https://api.spotify.com/v1/me/player/play (вот ссылка на их документы для конечной точки https://developer.spotify.com/console/put-play/). Всякий раз, когда я пытаюсь сделать запрос пут на конечную точку, я получаю400 код состояния с сообщением "Malformed json" Я получаю это сообщение, даже когда копирую / вставляю свой собственный json из документов, поэтому я не думаю, что это проблема с тем, как я форматирую свой json, кроме того, что я использовал json раньшедля вызова других конечных точек, и у них не было проблем с моим форматированием этих вызовов.

Вот мой код:

headers = {"Authorization":"Bearer {}".format(access_token)}

url = 'https://api.spotify.com/v1/me/player/play'
payload = {"context_uri": "spotify:album:5ht7ItJgpBH7W6vJ5BqpPr"}
r = requests.put(url, headers=headers, data=payload)
print(r)
print(r.text)

Чтобы уточнить, access_token - это токен доступа, которыйЯ получил от их процесса авторизации, и я использую python-запросы для выполнения http-запросов (Вот документы для этого: https://requests.kennethreitz.org/en/master/)

Мне интересно, если проблема связана с тем, что Spotifyиспользует двоеточия и их идентификаторы дорожек, а двоеточия также используются в JSON. Я видел в другом потоке, что мне следует попытаться добавить "Content-Type":"application/json" к моим заголовкам, но это никак не изменило результат.

Любая помощь очень ценится, и если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Спасибо!

1 Ответ

0 голосов
/ 24 октября 2019

Если ваша полезная нагрузка dict, используйте json kwargs в запросах lib. data работает для полезных данных строки. Вот, пожалуйста:

r = requests.put(url, headers=headers, json=payload)
...