Spotipy 异常引发状态 403;原因:none
Spotipy exception raised status 403; reason: none
我第一次尝试学习如何与 API 一起工作,我开始学习 spotipy。我正在关注此任务的 tutorial here。我按照教程进行操作,直到他打电话给 current_user_saved_tracks(limit=50, offset=0)
并且一切正常。
但是,当我尝试将其切换到另一个调用 current_user_top_tracks(limit=20, offset=0, time_range='medium_term')
时,它会抛出一个错误:
spotipy.exceptions.SpotifyException: http status: 403, code:-1 - https://api.spotify.com/v1/me/top/tracks?time_range=medium_term&limit=20&offset=0:
error, reason: None
我指的是 spotipy docs 这些电话。
这是我到目前为止的代码。作为参考,该调用是在第 40 行的函数 getTracks 中进行的:
import time
from flask import Flask, request, url_for, redirect, session
import spotipy
from spotipy.oauth2 import SpotifyOAuth
from git_ignore.config import *
app = Flask(__name__)
TOKEN_INFO = "token_info"
@app.route('/')
def login():
sp_oauth = create_spotify_ouath()
auth_url = sp_oauth.get_authorize_url()
return redirect(auth_url)
@app.route('/redirect')
def redirectPage():
sp_oauth = create_spotify_ouath()
session.clear()
code = request.args.get('code')
token_info = sp_oauth.get_access_token(code)
session[TOKEN_INFO] = token_info
return redirect(url_for('getTracks', _external=True))
@app.route('/getTracks')
def getTracks():
try:
token_info = get_token()
except:
print("user not logged in")
return redirect('/')
sp = spotipy.Spotify(auth=token_info['access_token'])
return sp.current_user_top_tracks(time_range='medium_term', limit=20, offset=0)
# return sp.current_user_saved_tracks(limit=20, offset=0)
# The commented line above seems to work but the one with top_tracks throws an error.
def get_token():
token_info = session.get(TOKEN_INFO, None)
if not token_info:
raise "exception"
now = int(time.time())
is_expired = token_info['expires_at'] - now < 60
if (is_expired):
sp_oauth = create_spotify_ouath()
token_info = sp_oauth.refresh_access_token(token_info['refresh_token'])
return token_info
def create_spotify_ouath():
return SpotifyOAuth(
client_id=client_id,
client_secret=client_secret,
# Where to come back to
redirect_uri=url_for('redirectPage', _external=True),
scope="user-library-read")
if __name__ == "__main__":
app.run(debug=True)
更新:所以我从这个问题中休息了几个小时,然后回来调试它。我去了 Spotify 仪表板 - 删除了我的应用程序并创建了一个新应用程序。然后,我再次替换了我的 Client ID 和 Client Secret 以及 运行 文件。它现在似乎工作!不确定问题到底是什么(可能是错误?)但创建新应用并替换您的凭据有效!
我收到 403:用户未在开发者仪表板中注册某些调用(获取用户的个人资料和设备),但未注册其他调用(与播放相关的调用)。
在开发者面板上创建一个新应用也为我解决了这个问题。
我第一次尝试学习如何与 API 一起工作,我开始学习 spotipy。我正在关注此任务的 tutorial here。我按照教程进行操作,直到他打电话给 current_user_saved_tracks(limit=50, offset=0)
并且一切正常。
但是,当我尝试将其切换到另一个调用 current_user_top_tracks(limit=20, offset=0, time_range='medium_term')
时,它会抛出一个错误:
spotipy.exceptions.SpotifyException: http status: 403, code:-1 - https://api.spotify.com/v1/me/top/tracks?time_range=medium_term&limit=20&offset=0:
error, reason: None
我指的是 spotipy docs 这些电话。 这是我到目前为止的代码。作为参考,该调用是在第 40 行的函数 getTracks 中进行的:
import time
from flask import Flask, request, url_for, redirect, session
import spotipy
from spotipy.oauth2 import SpotifyOAuth
from git_ignore.config import *
app = Flask(__name__)
TOKEN_INFO = "token_info"
@app.route('/')
def login():
sp_oauth = create_spotify_ouath()
auth_url = sp_oauth.get_authorize_url()
return redirect(auth_url)
@app.route('/redirect')
def redirectPage():
sp_oauth = create_spotify_ouath()
session.clear()
code = request.args.get('code')
token_info = sp_oauth.get_access_token(code)
session[TOKEN_INFO] = token_info
return redirect(url_for('getTracks', _external=True))
@app.route('/getTracks')
def getTracks():
try:
token_info = get_token()
except:
print("user not logged in")
return redirect('/')
sp = spotipy.Spotify(auth=token_info['access_token'])
return sp.current_user_top_tracks(time_range='medium_term', limit=20, offset=0)
# return sp.current_user_saved_tracks(limit=20, offset=0)
# The commented line above seems to work but the one with top_tracks throws an error.
def get_token():
token_info = session.get(TOKEN_INFO, None)
if not token_info:
raise "exception"
now = int(time.time())
is_expired = token_info['expires_at'] - now < 60
if (is_expired):
sp_oauth = create_spotify_ouath()
token_info = sp_oauth.refresh_access_token(token_info['refresh_token'])
return token_info
def create_spotify_ouath():
return SpotifyOAuth(
client_id=client_id,
client_secret=client_secret,
# Where to come back to
redirect_uri=url_for('redirectPage', _external=True),
scope="user-library-read")
if __name__ == "__main__":
app.run(debug=True)
更新:所以我从这个问题中休息了几个小时,然后回来调试它。我去了 Spotify 仪表板 - 删除了我的应用程序并创建了一个新应用程序。然后,我再次替换了我的 Client ID 和 Client Secret 以及 运行 文件。它现在似乎工作!不确定问题到底是什么(可能是错误?)但创建新应用并替换您的凭据有效!
我收到 403:用户未在开发者仪表板中注册某些调用(获取用户的个人资料和设备),但未注册其他调用(与播放相关的调用)。
在开发者面板上创建一个新应用也为我解决了这个问题。