我正在尝试获得我的应用程序和Spotify帐户的授权。不需要每个用户都在应用程序中使用该功能。因为还没有应用程序。只想先尝试一些事情。现在,我意识到出现混乱的情况,我可能应该使用该库。首先,我只是尝试按照以下说明将链接粘贴到浏览器中。第一步工作正常。但是,当我尝试用令牌交换身份验证代码时,总是会遇到错误。我想也许验证码的生命周期很短,而将验证码粘贴到新链接中总是为时已晚。
因此,问题是:我可以在执行GET请求后以某种方式获取出现在redirect_uri中的代码,然后将其作为参数之一传递给POST请求。
import requests
import config
import secrets
import string
URL_AUTH = 'https://accounts.spotify.com/authorize'
URL_TOKEN = 'https://accounts.spotify.com/api/token'
symbols = string.ascii_lowercase + string.digits
STATE = ''.join(secrets.choice(symbols) for _ in range(12))
params_auth = {
'client_id': config.CLIENT_ID,
'response_type': 'code',
'redirect_uri': 'https://example.com/callback',
'scope': 'user-read-currently-playing',
'state': STATE
}
data_token = {
'grant_type': "authorization_code",
# how can I get the auth code 'code': auth_code,
'redirect_uri': 'https://example.com/callback',
'client_id': config.CLIENT_ID,
'client_secret': config.CLIENT_SECRET
}
app_auth = requests.get(url=URL_AUTH, params=params_auth)
access_token = requests.post(url=URL_TOKEN, data=data_token)
答案 0 :(得分:0)
https://accounts.spotify.com/authorize
不是您的程序要发送请求的地址。您打算在网络浏览器中打开此页面,以供用户登录并授予您的应用程序权限以代表他们执行操作。用户完成操作并接受或拒绝您的应用程序的许可请求后,他们将被重定向到重定向网址,您将在其中收到授权码,您可以在其中进行身份验证和刷新令牌的交换在您的第二个请求中。
整个授权代码流已记录在here中。值得一提的是,“隐式授予”流程也更简单一些,并且可能适合您的目的。
Spotipy具有针对这些身份验证流内置的方法,因此您可能会发现使用该库更容易。
答案 1 :(得分:0)
您应该尝试对授权进行编码,并将其作为标头传递。
在分配的重定向页面上,您可以从URL中捕获代码,并将其传递给将打印令牌的函数,如下所示:
def get_current_profile_token(code):
basic = self.client_id + ':' + self.client_secret
basic = base64.b64encode(basic.encode('ascii'))
response = requests.post(
url = 'https://accounts.spotify.com/api/token',
data={
'grant_type': 'authorization_code',
'code': code,
'redirect_uri': self.redirect_url,
'scope': self.redirect_url,
},
headers={
"Authorization": "Basic " + basic.decode('ascii'),
},
verify=True
)
print(response.json())
return response.ok