繁体   English   中英

Spotify web api 调用给出错误代码(python)

[英]Spotify web api call gives wrong code (python)

要从 Spotify web api 获取授权码,我使用以下代码

AUTH_URL = 'https://accounts.spotify.com/authorize'
TOKEN_URL = 'https://accounts.spotify.com/api/token'
BASE_URL = 'https://api.spotify.com/v1/'

CLIENT_ID = '******'
CLIENT_SECRET = '*****'

auth_code = requests.get(AUTH_URL, {
    'client_id': CLIENT_ID,
    'response_type': 'code',
    'redirect_uri': 'uri',
    'scope': 'playlist-modify-private',
})

auth_header = base64.urlsafe_b64encode((CLIENT_ID + ':' + CLIENT_SECRET).encode())
headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Basic %s' % auth_header.decode('ascii')
}

payload = {
    'grant_type': 'authorization_code',
    'code': auth_code,
    'redirect_uri': 'uri',
    'client_id': CLIENT_ID,
    'client_secret': CLIENT_SECRET,
}
access_token_request = requests.post(url=TOKEN_URL, data=payload, headers=headers)
access_token_response_data = access_token_request.json()
access_token = access_token_response_data['access_token']

只有用于从 Spotify 获取代码的auth_code给出 <Response 200> 而不是代码。 有什么问题吗?

我试图打印自动代码,但它返回了 <Response 200>。 这最终用于为令牌调用 Spotify。

spotify 中的Authorization Code Flow需要应用程序端的服务器功能。

它可以从 spotify 服务器获取code值,然后使用code请求令牌。

在代码流程图中, 在这里详细说明

在此处输入图像描述

我将使用Flask进行演示

文件另存为spotify-client.py

from flask import Flask, request, redirect
from requests_oauthlib import OAuth2Session
from requests.auth import HTTPBasicAuth
import requests
import json

app = Flask(__name__)

AUTH_URL = 'https://accounts.spotify.com/authorize'
TOKEN_URL = 'https://accounts.spotify.com/api/token'
REDIRECT_URI = '<your callback URI>' # my case is 'http://localhost:3000/callback'
CLIENT_ID = "<your client id>"
CLIENT_SECRET = "<your client secret>"
SCOPE = [
    "user-read-email",
    "playlist-read-collaborative"
]

@app.route("/login")
def login():
    spotify = OAuth2Session(CLIENT_ID, scope=SCOPE, redirect_uri=REDIRECT_URI)
    authorization_url, state = spotify.authorization_url(AUTH_URL)
    return redirect(authorization_url)

@app.route("/callback", methods=['GET'])
def callback():
    code = request.args.get('code')
    res = requests.post(TOKEN_URL,
        auth=HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET),
        data={
            'grant_type': 'authorization_code',
            'code': code,
            'redirect_uri': REDIRECT_URI
        })
    return json.dumps(res.json())

if __name__ == '__main__':
    app.run(port=3000,debug=True)

脚步

#1 运行应用程序

python spotify-client.py

#2 打开浏览器并访问这个 URL

http://localhost:3000/login

#3 使用您的 Spotify 凭证登录此登录屏幕会自动显示给您。

在此处输入图像描述

#4 如果成功登录, access-token将显示在您的浏览器上。

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM