gsliwoski's picture
Upload app.py
96f35fd verified
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()