| import gradio as gr | |
| import pandas as pd | |
| import sys | |
| sys.path.extend(["."]) | |
| import artist_recommender | |
| def export_csv(ad_output): | |
| ad_output.to_csv("output.csv", index=False) | |
| return gr.File(value="output.csv", visible=True) | |
| def get_artist_recommendations(client_id, client_secret, client_redirect_uri, artist_list, create_playlist): | |
| print("Initializing Spotify") | |
| creds = { | |
| "SPOTIPY_CLIENT_ID": client_id, | |
| "SPOTIPY_CLIENT_SECRET": client_secret, | |
| "SPOTIPY_REDIRECT_URI": client_redirect_uri | |
| } | |
| artist_recommender.initialize_spotify_client(creds, isfile=False) | |
| sp = artist_recommender.sp | |
| try: | |
| _ = sp.current_user() | |
| except: | |
| print("Failed to initialize Spotify, are credentials correct?") | |
| sys.exit() | |
| tracks = artist_recommender.get_recently_played(selected_artists=artist_list) | |
| print("Getting reference features") | |
| reference_df = pd.DataFrame.from_records(tracks) | |
| print("Getting matching artist features") | |
| artist_features = artist_recommender.get_matching_artists(tracks) | |
| artist_df = pd.DataFrame(artist_features) | |
| reference_df['source'] = 'reference' | |
| artist_df['source'] = 'artist' | |
| df = pd.concat([reference_df, artist_df],ignore_index=True) | |
| closest_artists = artist_recommender.get_closest_artists(df, artist_recommender.MUSIC_FEATURES+artist_recommender.SHEET_FEATURES) | |
| closest_artists.to_csv("closest_artists.csv", index=False) | |
| if create_playlist: | |
| artist_recommender.generate_playlist(closest_artists, artist_list) | |
| return closest_artists | |
| with gr.Blocks() as demo: | |
| gr.Markdown( | |
| """ | |
| # Spotify Artist Recommender | |
| """ | |
| ) | |
| client_id = gr.Textbox(label="SPOTIFY_CLIENT_ID", value="") | |
| client_secret = gr.Textbox(label="SPOTIFY_CLIENT_SECRET", value="") | |
| client_redirect_uri = gr.Textbox(label="SPOTIFY_REDIRECT_URI", value="") | |
| artist_list = gr.Textbox(label="Arist list (Optional). Leave blank to use your recent activity. Otherwisr a CSV of artists", value="") | |
| create_playlist = gr.Checkbox(label="Generate a playlist", value=True) | |
| button = gr.Button("Get Artist Recommendations") | |
| output1 = gr.DataFrame(headers=['artist', 'artist_id', 'distance', 'artist_url'], interactive=False, wrap=True) | |
| button.click(fn=get_artist_recommendations, | |
| inputs=[client_id, client_secret, client_redirect_uri, artist_list, create_playlist], | |
| outputs=output1) | |
| export_button = gr.Button("Export Recommendations") | |
| csv = gr.File(interactive=False, visible=False) | |
| export_button.click(fn=export_csv, inputs=[output1], outputs=[csv]) | |
| if __name__ == '__main__': | |
| demo.launch() |