我正在使用 Spotify API,但出现时间错误
TypeError: 'module' object is not callable
特别是我的代码中处理授权流程的部分
def get_info(code):
auth_string = f'{os.getenv("Spotify_Client_ID")}:{os.getenv("Spotify_Client_Secret")}'
auth_bytes = auth_string.encode('utf-8')
auth_base64 = str(base64(auth_bytes), 'utf-8')
和
@app.route('/callback')
@cross_origin()
def getToken():
print("INSIDE CALLBACK *****")
code = request.args.get('code')
if code:
access_token, refresh_token , expires_in = get_info(code)
if access_token:
return f"Authentication successful! Access Token: {access_token}"
else:
return "Failed to obtain access token."
else:
return "Authorization code not found in callback request."
我尝试将授权格式化的方式更改为base64.b64encode(auth_bytes).decode('utf-8'),但这不起作用
使用“OAuth2Session”而不是“base64” 处理基本授权要容易得多。
演示代码
from flask import Flask, request, redirect
from requests_oauthlib import OAuth2Session
from requests.auth import HTTPBasicAuth
import requests
app = Flask(__name__)
AUTH_URL = 'https://accounts.spotify.com/authorize'
TOKEN_URL = 'https://accounts.spotify.com/api/token'
PORT = 3000
REDIRECT_URI = f'http://localhost:{PORT}/callback' # 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)
def get_info(code):
res = requests.post(TOKEN_URL,
auth = HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET),
data = {
'grant_type': 'authorization_code',
'code': code,
'redirect_uri': REDIRECT_URI
})
data = res.json()
return data['access_token'], data['refresh_token'], data['expires_in']
@app.route("/callback", methods=['GET'])
def getToken():
print("INSIDE CALLBACK *****")
code = request.args.get('code')
if code:
access_token, refresh_token , expires_in = get_info(code)
if access_token:
return f"Authentication successful! Access Token: {access_token}"
else:
return "Failed to obtain access token."
else:
return "Authorization code not found in callback request."
if __name__ == '__main__':
app.run(port=PORT,debug=True)
运行它
python get-token.py
浏览器登录
http://localhost:3000/login
结果