""" Prerequisites pip3 install spotipy Flask Flask-Session // from your [app settings](https://developer.spotify.com/dashboard/applications) export SPOTIPY_CLIENT_ID=client_id_here export SPOTIPY_CLIENT_SECRET=client_secret_here export SPOTIPY_REDIRECT_URI='http://127.0.0.1:8080' // must contain a port // on Windows, use `SET` instead of `export` Run app.py python3 -m flask run --port=8080 """ import os from flask import Flask, session, request, redirect from flask_session import Session import spotipy import uuid app = Flask(__name__) app.config['SECRET_KEY'] = os.urandom(64) app.config['SESSION_TYPE'] = 'filesystem' app.config['SESSION_FILE_DIR'] = './.flask_session/' Session(app) caches_folder = './.spotify_caches/' if not os.path.exists(caches_folder): os.makedirs(caches_folder) @app.route('/') def index(): if not session.get('uuid'): # Step 1. Visitor is unknown, give random ID session['uuid'] = str(uuid.uuid4()) auth_manager = spotipy.oauth2.SpotifyOAuth(cache_path=session_cache_path(), show_dialog=True) if request.args.get("code"): # Step 3. Being redirected from Spotify auth page auth_manager.get_access_token(request.args.get("code")) return redirect('/') if not auth_manager.get_cached_token(): # Step 2. Display sign in link when no token auth_url = auth_manager.get_authorize_url() return f'

Sign in

' # Step 4. Signed in, display data spotify = spotipy.Spotify(auth_manager=auth_manager) return f'

Hi {spotify.me()["display_name"]}, ' \ f'[sign out]

' \ f'my playlists' @app.route('/sign_out') def sign_out(): os.remove(session_cache_path()) session.clear() return redirect('/') @app.route('/playlists') def playlists(): auth_manager = spotipy.oauth2.SpotifyOAuth(cache_path=session_cache_path()) if not auth_manager.get_cached_token(): return redirect('/') spotify = spotipy.Spotify(auth_manager=auth_manager) return spotify.current_user_playlists() def session_cache_path(): return caches_folder + session.get('uuid')