def _api_error(response): try: msg = response.json()['error']['message'] except (ValueError, KeyError, TypeError): msg = 'unknown error' return spotipy.SpotifyException(response.status_code, -1, response.url + ':\n ' + msg, headers=response.headers)
def get_cached_token(username, scope=None, client_id=None, client_secret=None, redirect_uri=None, cache_path=None): ''' prompts the user to login if necessary and returns the user token suitable for use with the spotipy.Spotify constructor Parameters: - username - the Spotify username - scope - the desired scope of the request - client_id - the client id of your app - client_secret - the client secret of your app - redirect_uri - the redirect URI of your app - cache_path - path to location to save tokens ''' if not client_id: client_id = os.getenv('SPOTIPY_CLIENT_ID') if not client_secret: client_secret = os.getenv('SPOTIPY_CLIENT_SECRET') if not redirect_uri: redirect_uri = os.getenv('SPOTIPY_REDIRECT_URI') if not client_id: print(''' You need to set your Spotify API credentials. You can do this by setting environment variables like so: export SPOTIPY_CLIENT_ID='your-spotify-client-id' export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret' export SPOTIPY_REDIRECT_URI='your-app-redirect-url' Get your credentials at https://developer.spotify.com/my-applications ''') raise spotipy.SpotifyException(550, -1, 'no credentials set') cache_path = cache_path or ".cache-" + username sp_oauth = oauth2.SpotifyOAuth(client_id, client_secret, redirect_uri, scope=scope, cache_path=cache_path) # try to get a valid token for this user, from the cache, # if not in the cache, return an authorization url token_info = sp_oauth.get_cached_token() if not token_info: return (None, sp_oauth.get_authorize_url()) else: return (token_info['access_token'], None)
def get_token(): scope = 'playlist-modify-private' cache_path = '.spotify_cache' sp_oauth = oauth2.SpotifyOAuth(client_id, client_secret, redirect_uri, scope=scope, cache_path=cache_path) token_info = sp_oauth.get_cached_token() if token_info: return token_info['access_token'] else: raise spotipy.SpotifyException(550, -1, 'no credentials set')
def save_token_for_user_code(username, scope, code): client_id = os.getenv('SPOTIPY_CLIENT_ID') client_secret = os.getenv('SPOTIPY_CLIENT_SECRET') redirect_uri = os.getenv('SPOTIPY_REDIRECT_URI') if not client_id: raise spotipy.SpotifyException(550, -1, 'no credentials set') sp_oauth = oauth2.SpotifyOAuth(client_id, client_secret, redirect_uri, scope=scope, cache_path=".cache-" + username) token_info = sp_oauth.get_access_token(code) return token_info
def generate_token(code, scope): client_id = os.getenv('SPOTIPY_CLIENT_ID') client_secret = os.getenv('SPOTIPY_CLIENT_SECRET') redirect_uri = os.getenv('SPOTIPY_REDIRECT_URI') if not client_id: print(''' You need to set your Spotify API credentials. You can do this by setting environment variables like so: export SPOTIPY_CLIENT_ID='your-spotify-client-id' export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret' export SPOTIPY_REDIRECT_URI='your-app-redirect-url' Get your credentials at https://developer.spotify.com/my-applications ''') raise spotipy.SpotifyException(550, -1, 'no credentials set') sp_oauth = oauth2.SpotifyOAuth(client_id, client_secret, redirect_uri, scope=scope) return sp_oauth.get_access_token(code)['access_token']
def prompt_for_user_token(username, scope=None, client_id=None, client_secret=None, redirect_uri=None, cache_path=None): ''' prompts the user to login if necessary and returns the user token suitable for use with the spotipy.Spotify constructor Parameters: - username - the Spotify username - scope - the desired scope of the request - client_id - the client id of your app - client_secret - the client secret of your app - redirect_uri - the redirect URI of your app - cache_path - path to location to save tokens ''' if not client_id: client_id = os.getenv('SPOTIFY_CLIENT_ID') if not client_secret: client_secret = os.getenv('SPOTIFY_CLIENT_SECRET') if not redirect_uri: redirect_uri = os.getenv('SPOTIFY_REDIRECT_URI') if not client_id: print(''' You need to set your Spotify API credentials. You can do this by setting environment variables like so: export SPOTIPY_CLIENT_ID='your-spotify-client-id' export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret' export SPOTIPY_REDIRECT_URI='your-app-redirect-url' Get your credentials at https://developer.spotify.com/my-applications ''') raise spotipy.SpotifyException(550, -1, 'no credentials set') cache_path = cache_path or ".cache-" + username sp_oauth = oauth2.SpotifyOAuth(client_id, client_secret, redirect_uri, scope=scope, cache_path=cache_path) # try to get a valid token for this user, from the cache, # if not in the cache, the create a new (this will send # the user to a web page where they can authorize this app) token_info = sp_oauth.get_cached_token() if not token_info: print(''' User authentication requires interaction with your web browser. Once you enter your credentials and give authorization, you will be redirected to a url. Paste that url you were directed to to complete the authorization. ''') auth_url = sp_oauth.get_authorize_url() try: import webbrowser webbrowser.open(auth_url) print("Opened %s in your browser" % auth_url) except: print("Please navigate here: %s" % auth_url) print() print() try: response = raw_input("Enter the URL you were redirected to: ") except NameError: response = input("Enter the URL you were redirected to: ") print() print() code = sp_oauth.parse_response_code(response) token_info = sp_oauth.get_access_token(code) # Auth'ed API request if token_info: return token_info['access_token'] else: return None
def prompt_for_user_token(username, scope=None, client_id=None, client_secret=None, redirect_uri=None, cache_path=None, oauth_manager=None, show_dialog=False): warnings.warn( "'prompt_for_user_token' is deprecated." "Use the following instead: " " auth_manager=SpotifyOAuth(scope=scope)" " spotipy.Spotify(auth_manager=auth_manager)", DeprecationWarning) """ prompts the user to login if necessary and returns the user token suitable for use with the spotipy.Spotify constructor Parameters: - username - the Spotify username - scope - the desired scope of the request - client_id - the client id of your app - client_secret - the client secret of your app - redirect_uri - the redirect URI of your app - cache_path - path to location to save tokens - oauth_manager - Oauth manager object. - show_dialog - If true, a login prompt always shows """ if not oauth_manager: if not client_id: client_id = os.getenv("SPOTIPY_CLIENT_ID") if not client_secret: client_secret = os.getenv("SPOTIPY_CLIENT_SECRET") if not redirect_uri: redirect_uri = os.getenv("SPOTIPY_REDIRECT_URI") if not client_id: LOGGER.warning(""" You need to set your Spotify API credentials. You can do this by setting environment variables like so: export SPOTIPY_CLIENT_ID='your-spotify-client-id' export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret' export SPOTIPY_REDIRECT_URI='your-app-redirect-url' Get your credentials at https://developer.spotify.com/my-applications """) raise spotipy.SpotifyException(550, -1, "no credentials set") cache_path = cache_path or ".cache-" + username sp_oauth = oauth_manager or spotipy.SpotifyOAuth(client_id, client_secret, redirect_uri, scope=scope, cache_path=cache_path, show_dialog=show_dialog) # try to get a valid token for this user, from the cache, # if not in the cache, the create a new (this will send # the user to a web page where they can authorize this app) token_info = sp_oauth.get_cached_token() if not token_info: code = sp_oauth.get_auth_response() token = sp_oauth.get_access_token(code, as_dict=False) else: return token_info["access_token"] # Auth'ed API request if token: return token else: return None
def post(self): token = request.headers.get("API_Key", None) if not token: loggingWrite("No token provided", "System") return {'message': "No API Token Provided"}, 401 if validateTokenValue(token): name = request.form.get("name", None) messageVal = request.form.get("message", None) try: if name and messageVal: cache_handler = spotipy.cache_handler.CacheFileHandler(cache_path='data/.cache') auth_manager = spotipy.oauth2.SpotifyOAuth(client_id=os.environ["CLIENT_ID"], client_secret=os.environ["CLIENT_SECRET"], redirect_uri=request.host_url + "login", cache_handler=cache_handler) if not auth_manager.validate_token(cache_handler.get_cached_token()): loggingWrite("Need to login", "System") return {'message': "Please Login to :" + request.host_url + "login"}, 309 sp = spotipy.Spotify(auth_manager=auth_manager) message = messageVal if message.startswith("!"): temp = message[1:].strip().lower() if temp != "!" and temp != "" and temp != "!!": try: if temp.startswith("!"): text = temp[1:].strip().lower() command = text.split(" ")[0] notcommand = text.replace(command, "").strip() if command == "next": nexttrack(sp) loggingWrite("Moved to next Song", name) return {'message': "Moved to next song"}, 200 elif command == "back": backtrack(sp) loggingWrite("Moved to previous Song", name) return {'message': "Moved to previous song"}, 200 elif command == "fplay": playReturn = searchAndPlaySpot(notcommand, sp, forcePlay) if playReturn: track = playReturn[0] Artist = playReturn[1] loggingWrite("Forced Played: " + track[ "name"] + " By:" + Artist + " -------------- Link: " + track["external_urls"]["spotify"], name) return {'message': "Forced Played: " + track[ "name"] + "\nBy:" + Artist + "\nLink: " + \ track["external_urls"]["spotify"]}, 200 else: loggingWrite("Force Play: No results for " + temp, name) return {'message': "Did not play: There were no results"}, 200 elif command == "vol" or command == "volume": try: vol = int(notcommand) if vol >= 0 and vol <= 100: changeVolume(sp, vol) loggingWrite("Volume changed to " + str(vol), name) return {'message': "Volume Changed to " + str(vol)}, 200 else: raise ValueError except ValueError as e: loggingWrite( "Error: " + notcommand + " was not a valid number, must be between 0 and 100", name) return { 'message': "Error: Not a Valid Number, must be between 0 and 100"}, 200 elif command == "queue": if len(queue) != 0: previoussongs = previoussong(sp, int(songdetails[queue[0]][3])) for item in previoussongs["items"]: if item["track"]["id"] in queue: queue.remove(item["track"]["id"]) if item["track"]["id"] in songdetails: songdetails.pop(item["track"]["id"]) currentsong = currentlyplaying(sp) if currentsong != None: if currentsong["item"]["id"] in queue: queue.remove(currentsong["item"]["id"]) if currentsong["item"]["id"] in songdetails: songdetails.pop(currentsong["item"]["id"]) currentArtist = "" found = False for index, artists in enumerate(currentsong["item"]["artists"]): currentArtist += artists["name"] + ", " found = True if not found: currentArtist = "No found artist" else: currentArtist = currentArtist[0:-2] returnmessage = "Current Song: " + currentsong["item"][ "name"] + " By: " + currentArtist returnmessage += "\n----------------------------\nQueue:" number = 1 if len(queue) == 0: returnmessage += "\nNothing in Queue" for item in queue: songdet = songdetails[item] returnmessage += "\n" + str(number) + ". " + songdet[1] + " By: " + \ songdet[2] + " -- Queued By:" + songdet[0] number += 1 loggingWrite("Return Queue", name) return {'message': returnmessage}, 200 else: raise spotipy.SpotifyException(http_status=404, code=-1, msg="!!queue\nPlayer command failed: No active device found", reason="NO_ACTIVE_DEVICE") else: return {'message': "Command not found"}, 200 else: playReturn = searchAndPlaySpot(temp, sp, addQueue) if playReturn: track = playReturn[0] Artist = playReturn[1] if not playReturn[2]: queue.append(track["id"]) songdetails[track["id"]] = [name, track["name"], Artist, time.time()] loggingWrite( "Added " + track["name"] + " By:" + Artist + " ---------- Link: " + \ track["external_urls"]["spotify"], name) return {'message': "Added " + track[ "name"] + "\nBy:" + Artist + "\nLink: " + \ track["external_urls"]["spotify"]}, 200 else: loggingWrite("Already added " + track[ "name"] + " By:" + Artist + " ---------- Link: " + \ track["external_urls"]["spotify"] + "\nSkipped", name) return {'message': "Already added " + track[ "name"] + "\nBy:" + Artist + "\nLink: " + \ track["external_urls"]["spotify"] + "\nSkipped"}, 200 else: loggingWrite("Queue: No results for " + temp, name) return {'message': "Did not add: There were no results"}, 200 except spotipy.SpotifyException as error: if error.reason == "NO_ACTIVE_DEVICE": queue.clear() songdetails.clear() loggingWrite("Error: Spotify not active: " + str(error), name) return {'message': "Error: Spotify not active"}, 428 elif error.reason == "VOLUME_CONTROL_DISALLOW": loggingWrite("Error: Volume Cannot Be Controlled: " + str(error), name) return {'message': "Volume Cannot Be Controlled"}, 200 else: raise error else: loggingWrite("Nothing was provided", name) return {'message': "Error: There was nothing provided"}, 404 else: loggingWrite("Did not have a message that started with !", name) return {'message': "Must start with !"}, 422 else: loggingWrite("Did not provide phone number or message", "unknown") return {'message': "Must have \'name\' and \'message\'"}, 422 except Exception as e: loggingWrite("Error: " + str(e) + " --- Command is: " + str(messageVal), name) return {'message': "Error Occurred "}, 400 loggingWrite("Error: Nothing was matched How is that possible. The command is : " + str(messageVal), "Unknown") return {'message': "Error: Nothing was matched"}, 400 else: loggingWrite("Error: Token Invalid", "System") return {"message": "Error: Token must be valid"}, 401
def prompt_for_user_token(username, scope=None, client_id=None, client_secret=None, redirect_uri=None): ''' prompts the user to login if necessary and returns the user token suitable for use with the spotipy.Spotify constructor Parameters: - username - the Spotify username - scope - the desired scope of the request - client_id - the client id of your app - client_secret - the client secret of your app - redirect_uri - the redirect URI of your app ''' if not os.path.exists(TOKEN_CACHE_PATH): os.makedirs(TOKEN_CACHE_PATH) if not client_id: client_id = os.getenv('SPOTIPY_CLIENT_ID') if not client_secret: client_secret = os.getenv('SPOTIPY_CLIENT_SECRET') if not redirect_uri: redirect_uri = os.getenv('SPOTIPY_REDIRECT_URI') if not client_id: sys.stderr.write(''' You need to set your Spotify API credentials. You can do this by setting environment variables like so: export SPOTIPY_CLIENT_ID='your-spotify-client-id' export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret' export SPOTIPY_REDIRECT_URI='your-app-redirect-url' Get your credentials at https://developer.spotify.com/my-applications ''') raise spotipy.SpotifyException(550, -1, 'no credentials set') cache_path = os.path.join(TOKEN_CACHE_PATH, ".cache-" + username) sp_oauth = oauth2.SpotifyOAuth(client_id, client_secret, redirect_uri, scope=scope, cache_path=cache_path) # try to get a valid token for this user, from the cache, # if not in the cache, the create a new (this will send # the user to a web page where they can authorize this app) token_info = sp_oauth.get_cached_token() if not token_info: sys.stderr.write(''' User authentication requires interaction with your web browser. Once you enter your credentials and give authorization, you will be redirected to a url. Paste that url you were directed to to complete the authorization. ''') auth_url = sp_oauth.get_authorize_url() try: subprocess.call(["open", auth_url]) sys.stderr.write("Opening {} in your browser\n".format(auth_url)) except: try: subprocess.call(["cygstart", auth_url]) sys.stderr.write( "Opening {} in your browser\n".format(auth_url)) except: sys.stderr.write("Please navigate here: {}\n".format(auth_url)) sys.stderr.write("\n\n") response = raw_input("Enter the URL you were redirected to: ") sys.stderr.write("\n\n") sys.stderr.write("\n\n") code = sp_oauth.parse_response_code(response) token_info = sp_oauth.get_access_token(code) # Auth'ed API request if token_info: return token_info['access_token'] else: return None
def spotlogin(request): ''' prompts the user to login if necessary and returns the user token suitable for use with the spotipy.Spotify constructor Parameters: - username - the Spotify username - scope - the desired scope of the request - client_id - the client id of your app - client_secret - the client secret of your app - redirect_uri - the redirect URI of your app - cache_path - path to location to save tokens ''' client_id = '327541285c7343afbf4822dc9d30ef7f' client_secret = '713dbe89b2ea4bd382fb0a7b366a63bb' redirect_uri = 'http://smalldata411.web.illinois.edu/redirect' cache_path = None username = '******' #hardcoded now...change for later scope = 'user-library-read' if not client_id: client_id = os.getenv('SPOTIPY_CLIENT_ID') if not client_secret: client_secret = os.getenv('SPOTIPY_CLIENT_SECRET') if not redirect_uri: redirect_uri = os.getenv('SPOTIPY_REDIRECT_URI') if not client_id: print(''' You need to set your Spotify API credentials. You can do this by setting environment variables like so: export SPOTIPY_CLIENT_ID='your-spotify-client-id' export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret' export SPOTIPY_REDIRECT_URI='your-app-redirect-url' Get your credentials at https://developer.spotify.com/my-applications ''') raise spotipy.SpotifyException(550, -1, 'no credentials set') cache_path = cache_path or ".cache-" + username sp_oauth = oauth2.SpotifyOAuth(client_id, client_secret, redirect_uri, scope=scope, cache_path=cache_path) # try to get a valid token for this user, from the cache, # if not in the cache, the create a new (this will send # the user to a web page where they can authorize this app) token_info = sp_oauth.get_cached_token() if not token_info: print(''' User authentication requires interaction with your web browser. Once you enter your credentials and give authorization, you will be redirected to a url. Paste that url you were directed to to complete the authorization. ''') auth_url = sp_oauth.get_authorize_url() #attempt to open the authorize url. This will redirect to our redirect page upon login try: # import webbrowser # webbrowser.open_new_tab(auth_url) #return HttpResponse("OPENED: " + str(auth_url)) return HttpResponseRedirect(str(auth_url)) except: return HttpResponse("FAILED")
def prompt_for_user_token(username, scope=None, client_id=None, client_secret=None, redirect_uri=None): """ prompts the user to login if necessary and returns the user token suitable for use with the spotipy.Spotify constructor Parameters: - username - the Spotify username - scope - the desired scope of the request - client_id - the client id of your app - client_secret - the client secret of your app - redirect_uri - the redirect URI of your app """ if not client_id: client_id = os.getenv("SPOTIPY_CLIENT_ID") if not client_secret: client_secret = os.getenv("SPOTIPY_CLIENT_SECRET") if not redirect_uri: redirect_uri = os.getenv("SPOTIPY_REDIRECT_URI", "http://localhost:8080") if not client_id: print(''' You need to set your Spotify API credentials. You can do this by setting environment variables like so: export SPOTIPY_CLIENT_ID='your-spotify-client-id' export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret' export SPOTIPY_REDIRECT_URI='your-app-redirect-url' Get your credentials at https://developer.spotify.com/my-applications ''') raise spotipy.SpotifyException(550, -1, 'no credentials set') sp_oauth = oauth2.SpotifyOAuth(client_id, client_secret, redirect_uri, scope=scope, cache_path=get_cache_path(username)) # try to get a valid token for this user, from the cache, # if not in the cache, the create a new (this will send # the user to a web page where they can authorize this app) token_info = sp_oauth.get_cached_token() if not token_info: redirect_uri_parsed = urlparse(redirect_uri) run_server(redirect_uri_parsed.hostname, redirect_uri_parsed.port) auth_url = sp_oauth.get_authorize_url() try: import webbrowser webbrowser.open(auth_url) except: print("Please navigate here: %s" % auth_url) response = "%s?code=%s" % (redirect_uri, auth_token_queue.get()) event_queue.put("done") code = sp_oauth.parse_response_code(response) token_info = sp_oauth.get_access_token(code) # Auth'ed API request if token_info: return token_info['access_token'] else: return None
def obtain_token_localhost(username, scope=None, client_id=None, client_secret=None, redirect_uri=None, cache_path=None): ''' prompts the user to login if necessary and returns the user token suitable for use with the spotipy.Spotify constructor Parameters: - username - the Spotify username - scope - the desired scope of the request - client_id - the client id of your app - client_secret - the client secret of your app - redirect_uri - the redirect URI of your app - cache_path - path to location to save tokens ''' cache_path = cache_path or ".cache-" + username if not client_id: client_id = os.getenv('SPOTIPY_CLIENT_ID') if not client_secret: client_secret = os.getenv('SPOTIPY_CLIENT_SECRET') if not redirect_uri: redirect_uri = os.getenv('SPOTIPY_REDIRECT_URI') if not client_id: print(''' You need to set your Spotify API credentials. You can do this by setting environment variables like so: export SPOTIPY_CLIENT_ID='your-spotify-client-id' export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret' export SPOTIPY_REDIRECT_URI='your-app-redirect-url' Get your credentials at https://developer.spotify.com/my-applications ''') raise spotipy.SpotifyException(550, -1, 'no credentials set') sp_oauth = oauth2.SpotifyOAuth(client_id, client_secret, redirect_uri, scope=scope, cache_path=cache_path) token_info = sp_oauth.get_cached_token() if token_info: return token_info['access_token'] print("Proceeding with user authorization") auth_url = sp_oauth.get_authorize_url() try: import webbrowser webbrowser.open(auth_url) print("Opened %s in your browser" % auth_url) except: print("Please navigate here: %s" % auth_url) url_info = urlparse(redirect_uri) netloc = url_info.netloc if ":" in netloc: port = int(netloc.split(":", 1)[1]) else: port = 80 server = start_local_http_server(port) server.handle_request() if server.auth_code: token_info = sp_oauth.get_access_token(server.auth_code) return token_info['access_token']
def func(): raise spotipy.SpotifyException(http_status=http_status, code=-1, msg=message)
def prompt_for_user_token_mod(username, scope=None, client_id=None, client_secret=None, redirect_uri=None, cache_path=None, oauth_manager=None, show_dialog=False): if not oauth_manager: if not client_id: client_id = os.getenv("SPOTIPY_CLIENT_ID") if not client_secret: client_secret = os.getenv("SPOTIPY_CLIENT_SECRET") if not redirect_uri: redirect_uri = os.getenv("SPOTIPY_REDIRECT_URI") if not client_id: print(""" You need to set your Spotify API credentials. You can do this by setting environment variables like so: export SPOTIPY_CLIENT_ID='your-spotify-client-id' export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret' export SPOTIPY_REDIRECT_URI='your-app-redirect-url' Get your credentials at https://developer.spotify.com/my-applications """) raise spotipy.SpotifyException(550, -1, "no credentials set") cache_path = cache_path or ".cache-" + username sp_oauth = oauth_manager or spotipy.SpotifyOAuth(client_id, client_secret, redirect_uri, scope=scope, cache_path=cache_path, show_dialog=show_dialog) # try to get a valid token for this user, from the cache, # if not in the cache, the create a new (this will send # the user to a web page where they can authorize this app) token_info = sp_oauth.get_cached_token() if not token_info: server_address = ('', 8420) httpd = OAuthHTTPServer(server_address) import webbrowser webbrowser.open(sp_oauth.get_authorize_url()) httpd.server.handle_request() if httpd.server.url: url = httpd.server.url code = sp_oauth.parse_response_code(url) token = sp_oauth.get_access_token(code, as_dict=False) else: return token_info["access_token"] # Auth'ed API request if token: return token else: return None
def prompt_for_user_token(username, scope=None, client_id=None, client_secret=None, redirect_uri=None, cache_path=None, direction='source'): """ prompts the user to login if necessary and returns the user token suitable for use with the spotipy.Spotify constructor Parameters: - username - the Spotify username - scope - the desired scope of the request - client_id - the client id of your app - client_secret - the client secret of your app - redirect_uri - the redirect URI of your app - cache_path - path to location to save tokens """ if not client_id: client_id = os.getenv('SPOTIPY_CLIENT_ID') if not client_secret: client_secret = os.getenv('SPOTIPY_CLIENT_SECRET') if not redirect_uri: redirect_uri = os.getenv('SPOTIPY_REDIRECT_URI') if not client_id: print(''' You need to set your Spotify API credentials. You can do this by setting environment variables like so: export SPOTIPY_CLIENT_ID='your-spotify-client-id' export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret' export SPOTIPY_REDIRECT_URI='your-app-redirect-url' Get your credentials at https://developer.spotify.com/my-applications ''') raise spotipy.SpotifyException(550, -1, 'no credentials set') cache_path = cache_path or ".cache-" + username sp_oauth = oauth2.SpotifyOAuth(client_id, client_secret, redirect_uri, scope=scope, cache_path=cache_path) # try to get a valid token for this user, from the cache, # if not in the cache, the create a new (this will send # the user to a web page where they can authorize this app) token_info = sp_oauth.get_cached_token() if not token_info: print(f''' ##################################################### Need to authenticate the Spotify user: {username} for login type: {direction.upper()} Login type SOURCE means, that we need to authenticate for an account which will be used to read collections and items from (READ only). Login type DESTINATION means, that we need to authenticate for an account which will be used to copy collections and items from the SOURCE accounts TO (READ/WRITE). We will accuire the following permissions: ''') for s in scope.split(): print(f' {s}') print(f''' Please login to Spotify as this user in the web browser which just should have been opened. Once you enter your credentials and give authorization, you will be redirected to a url. IMPORTANT: Even if the page is not displayed or indicates an error (like "Could not be found" or similar), copy the url you were directed to from your browser's address bar and paste it to this shell to complete the authorization. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Please make sure to close the browser window after you have copied the URL (and before pasting it to this window) to make sure the next instances are launched in a new private session. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ''') auth_url = sp_oauth.get_authorize_url() try: _inkognito_wrap_browsers(webbrowser) webbrowser.open(auth_url) print("Opened %s in your browser" % auth_url) except webbrowser.Error: print("Please navigate here: %s" % auth_url) print() print() response = input("Enter the URL you were redirected to: ") print() print() code = sp_oauth.parse_response_code(response) token_info = sp_oauth.get_access_token(code) # Auth'ed API request if token_info: return token_info['access_token'] else: return None