CoolFace
Apppublic

halimbox/Spotify

sourceHugging Faceartistic-2.0updated 4y agoView on Hugging Face
0likes
ss_functions.py270 linesDownload Raw Back to root
1#!/usr/bin/env python32# -*- coding: utf-8 -*-3"""4Created on Sat Jul 23 10:15:02 20225 6@author: halimbouayad7"""8import spotipy9from spotipy.oauth2 import SpotifyOAuth10import json11import spotipy.util as util12from spotipy.oauth2 import SpotifyClientCredentials13import requests14from requests import *15import pandas as pd16import streamlit as st17import numpy as np18import time19 20def connect(scope, username):21    scope = "user-library-read"  22    token = SpotifyOAuth(scope=scope, username=username)23    spotifyObject = spotipy.Spotify(auth_manager=token)24    return spotifyObject25 26 27def get_features(a):28    29    feature_names = [f for f in a[0]]30    features = []31 32    for i in range(len(a)):33        34        features.append([a[i][f] for f in a[i]])35#        features=list(np.pad(features, (0, max_length), 'constant'))36 37    #print(len(features))38    return features, feature_names39 40 41 42def get_artist(liste):43    for i, artists in enumerate(liste):44        if i ==0:45            artist=artists['name']46        else:47            artist=artist+", "+artists['name']48    return artist49 50@st.cache51def get_data(sp, username):52    playlists = sp.current_user_playlists(limit=50)53   54    tr_names=[]55    pl_urls=[]56    pl_names=[]57    #tracks=[]58    #links=[]59    date_added=[]60    popularity=[]61    ids=[]62    artist_list=[]63    #features=[]64    features=pd.DataFrame()65    df=pd.DataFrame()66    67    while playlists:68        69        70        71        for i, playlist in enumerate(playlists['items']):72            #print("%4d %s %s" % (i + 1 + playlists['offset'], playlist['uri'],  playlist['name']))73            # urls.append(playlist['uri'])74            # names.append(playlist['name'])75            # tracks.append(playlist['tracks']['total'])76            # links.append(playlist['external_urls']['spotify'])77            # ids.append(playlist['id'])78            #print(playlist)79            #st.text(last)80            print(playlist)81            playlist_content=sp.playlist(playlist['uri'])82            for i,trax in enumerate(playlist_content['tracks']['items']):83                84                #Track name85                tr_names.append(trax['track']['name'])86                87                #Track ID88                ids.append(trax['track']['id'])89                90                date_added.append(trax['added_at'])91                92                popularity.append(trax['track']['popularity'])93                94                #Playlist Name95                pl_names.append(playlist['name'])96                97                #Track URI98                pl_urls.append(playlist['uri'])99                100                artist_list.append(get_artist(trax['track']['artists']))101                102                test='All done!'103                104        if playlists['next']:105            playlists = sp.next(playlists)106        else:107            playlists = None108    109    #audio_analysis110 111 112    df['playlist']=pl_names113    df['track']=tr_names114    df['artist']=artist_list115    df['playlist_url']=pl_urls116    df['track_id']=ids117    df['date_added']=date_added118    df['popularity']=popularity119    120    #Audio Features121 122    # start=0123 124    # for i in range(int(np.ceil(len(df)/50))):125    #     end=max(start+50, len(df))126        127        128        129    #     print('test='+str(i))130    #     print(feat)131 132    #API only handles batch of 100 of ids133    for start in range(0, len(df), 100):134        135        if start+100>len(df):136            end=len(df)137        else:138            end=start+100139            140 141 142        audio_feat=sp.audio_features(df.track_id[start:end])143        144        ##print('audio feat=======')145        #print(audio_feat)146        147        #print('feat=======')148        feat, feat_names = get_features(audio_feat)149        print('-----feat')150        print(feat)151        print('-----features')152        print(features)153        features=pd.concat([features, pd.DataFrame(feat)], axis=0)154        print('-----features')155        print(features)156 157    #print(len(features))158    159    160    features.columns=feat_names161    162    df=pd.concat([df.reset_index(), features.reset_index()], axis=1)163 164 165    166    df=df.drop(columns=['index', 'index'])167    168    #df.to_pickle('./spotify.pkl')169    return df, test170 171# def playlist_details(sp, df, username):172    173   174    175#     selected=st.selectbox('Please select to zoom', df.name)176#     uri=df[df.name==selected].reset_index()['url'][0]177#     #df_tracks=pd.DataFrame(playlist_content)178    179#     # Connection to Spotipy180#     #sp=connect(scope='user-library_read', username=username)181#     playlist_content=sp.playlist(uri)182#     names=[]183#     releasedays=[]184#     ids=[]185    186#     for i,trax in enumerate(playlist_content['tracks']['items']):187    188#         names.append(trax['track']['name'])189#         #releasedays.append(trax['track']['added_at'])190#         ids.append(trax['track']['id'])191        192#     pl=pd.DataFrame()193#     pl['name']=names194#     #pl['release_date']=releasedays195#     pl['id']=ids196#     st.dataframe(pl)197#     return df 198 199def EDA(df):200    st.header("EDA")201    #Key Metrics202    f_value=st.selectbox('Select a playlist', df.playlist.unique())203    dff=df[df.playlist==f_value]204    205    cols=['danceability','energy','acousticness','tempo','loudness','valence']206    for col in cols[:2]:207        temp=dff.describe().loc['mean',:][col]208        st.metric(col, '{:.1%}'.format(temp))209    210    st.text('Top songs from that album:')211    st.dataframe(dff)212 213    selected=st.selectbox('By playlist (click to select other filter)', df.columns)214    st.bar_chart(df[df.playlist==f_value].groupby(selected).agg({'danceability':'mean'}))215 216    217     218 219    220#if st.button('View playlist!'):221    222# def playlist_overview(sp, username):223#     # scope = "user-library-read"  224#     # token = SpotifyOAuth(scope=scope, username=username)225#     # spotifyObject = spotipy.Spotify(auth_manager=token)226    227    228#     playlists = sp.current_user_playlists(limit=50)229#     print('=================')230#     #response = requests.get("http://localhost:1234", timeout=10)231#     #print(response.json())232#     print('=================')233#     df=pd.DataFrame()   234    235#     urls=[]236#     names=[]237#     tracks=[]238#     links=[]239#     ids=[]240    241#     while playlists:242        243#         for i, playlist in enumerate(playlists['items']):244#             #print("%4d %s %s" % (i + 1 + playlists['offset'], playlist['uri'],  playlist['name']))245#             urls.append(playlist['uri'])246#             names.append(playlist['name'])247#             tracks.append(playlist['tracks']['total'])248#             links.append(playlist['external_urls']['spotify'])249#             ids.append(playlist['id'])250#             #print(playlist)251#             #st.text(last)252           253      254            255#         if playlists['next']:256#             playlists = sp.next(playlists)257#         else:258#             playlists = None259    260#     #audio_analysis261    262#     df['name']=names263#     df['tracks']=tracks264#     df['url']=urls265#     df['id']=ids266#     st.dataframe(df)   267 268#[a[0][i] for i in a[0]] 269# 1seFIg83Eac87g1hmtBRjG270# 5ZwRTJD1bTACtIuW5Iibnu