“解析 JSON 时出错"使用 Spotify API 时 [英] "Error parsing JSON" when using Spotify API

查看:33
本文介绍了“解析 JSON 时出错"使用 Spotify API 时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习 Python,我正在尝试使用 Spotify Web api 创建播放列表,但出现 http 400 错误:解析 json 时出错.我想这与令牌中的变量类型不正确有关,但我很难调试它,因为我无法找到以原始格式查看发布请求的方法.

I am learning Python and I am trying to create a playlist using the Spotify web api but get a http 400 error: Error parsing json. I guess it has to do with an incorrect variable type in the token but I am having a really hard time debugging it as I can't figure out a way to see the post request in raw format.

通过 API 发布需要授权,这是我为此创建的脚本:

Posting through the API requires authorizing and this is the script I've created for that:

import requests
import base64
requests.packages.urllib3.disable_warnings()

client_id = 'ID'
client_secret = 'SECRET'
redirect_uri = 'http://spotify.com/'
scope = 'playlist-modify-private playlist-read-private'

def request_token():

    #  1. Your application requests authorization
    auth_url = 'https://accounts.spotify.com/authorize'
    payload = {'client_id': client_id, 'response_type':'code','redirect_uri':redirect_uri}
    auth = requests.get(auth_url,params = payload)
    print '\nPlease go to this url to authorize ', auth.url

    #  2. The user is asked to authorize access within the scopes
    #  3. The user is redirected back to your specified URI
    resp_url = raw_input('\nThen please copy-paste the url you where redirected to: ')
    resp_code= resp_url.split("?code=")[1].split("&")[0]

    #  4. Your application requests refresh and access tokens
    token_url = 'https://accounts.spotify.com/api/token'
    payload = {'redirect_uri': redirect_uri,'code': resp_code, 'grant_type': 'authorization_code','scope':scope}
    auth_header = base64.b64encode(client_id + ':' + client_secret)
    headers = {'Authorization': 'Basic %s' % auth_header}
    req = requests.post(token_url, data=payload, headers=headers, verify=True)
    response = req.json()

    return response

这是实际尝试使用授权令牌创建播放列表的函数(import authorizer 是上面的函数):

This is the function actually trying to create the playlist using the authorization token (import authorizer is the function above):

import requests
import authorizer

def create_playlist(username, list_name):
    token = authorizer.request_token()
    access_token = token['access_token']
    auth_header = {'Authorization': 'Bearer {token}'.format(token=access_token), 'Content-Type': 'application/json'}
    api_url = 'https://api.spotify.com/v1/users/%s/playlists' % username
    payload = {'name': list_name, 'public': 'false'}
    r = requests.post(api_url, params=payload, headers=auth_header)

但是无论我尝试什么,都只会导致 400 错误.任何人都可以在这里指出我的错误吗?

But whatever I try it only leads to a 400 error. Can anyone please point out my error here?

推荐答案

通过为输入添加 json.dumps 解决:json.dumps(payload) 并将有效负载更改为 'data'而不是请求中的参数".

Solved by adding a json.dumps for the input: json.dumps(payload) and changing the payload to be 'data' and not 'params' in the request.

所以新的功能请求等于:

So the new functioning request equals:

r = requests.post(api_url, data=json.dumps(payload), headers=auth_header)

这篇关于“解析 JSON 时出错"使用 Spotify API 时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆