######### # Date: 4/6/21 # Author: JA ######### pacman::p_load( #dataframe tidyverse, ggrepel, #viz plotly, #webapps shiny, #api spotifyr ) # Application # Platform # API - Application Public Interface # REST - Resource State Transfer # JSON - JavaScript Object Notation # Authentication # Authorization readRenviron(".env") # Dashboard # Tablero # (Graphical) User Interface ui <- pageWithSidebar( titlePanel("Hallazgos Musicales"), sidebarPanel( htmlOutput( outputId="selecta" ), htmlOutput( outputId="selectb" ), selectInput( inputId="x", label="X:", choices=c("acousticness","danceability","duration_ms","energy","instrumentalness","key","key_name","key_mode","mode","mode_name","liveness","loudness","speechiness","tempo","time_signature","valence"), selected="valence" ), selectInput( inputId="y", label="Y:", choices=c("acousticness","danceability","duration_ms","energy","instrumentalness","key","key_name","key_mode","mode","mode_name","liveness","loudness","speechiness","tempo","time_signature","valence"), selected="key_name" ), ), mainPanel( plotOutput( outputId="plot" ) ) ) # Server # Reactivity server <- function(input,output) { access_token <- reactive({ get_spotify_access_token( client_id=Sys.getenv("SPOTIFY_CLIENT_ID"), client_secret=Sys.getenv("SPOTIFY_CLIENT_SECRET") ) }) artists <- reactive({ toptoday <- get_playlist_tracks( playlist_id="37i9dQZF1DXcBWIGoYBM5M", authorization=access_token() ) unique( unlist( lapply(toptoday$track.artists, function(a) { as.data.frame(a)$name }) ) ) }) output$selecta <-renderUI({ selectInput( inputId="a", label="Artista A:", choices=artists(), selected="The XX" ) }) output$selectb <- renderUI({ selectInput( inputId="b", label="Artista B:", choices=artists(), selected="Buena Vista Social Club" ) }) a <- reactive({ get_artist_audio_features( artist=input$a, authorization=access_token() ) }) b <- reactive({ get_artist_audio_features( artist=input$b, authorization=access_token() ) }) x <- reactive({ input$x }) y <- reactive({ input$y }) output$plot <- renderPlot({ plot <- ggplot() + geom_point(a(),mapping=aes_string(x=x(),y=y()),color="blue") + geom_smooth(a(),mapping=aes_string(x=x(),y=y()),color="blue") + geom_point(b(),mapping=aes_string(x=x(),y=y()),color="red") + geom_smooth(b(),mapping=aes_string(x=x(),y=y()),color="red") plot }) } shinyApp(ui,server) # Acousticness/Instrumentalness # Danceability/Valence -> Lyrics # Structural Programming # Procedural Programming #temp = [] #forEach(toptoday, s => { # if (s.track.name == "Motley Crew") { # temp.push(s); # } #}) # Declarative Programming # Reactive Programming # Functional Programming # Pipeline # Tuberías #toptoday %>% # filter(track.name == "Motley Crew") %>% # select(track.name) %>% # paste0(" - Canción") #toptoday %>% # select(track.artists) %>% # select(name) %>% # unlist() #artists <- lapply(toptoday$track.artists, function(a) { as.data.frame(a)$name }) #artists <- unlist(artists) #playlists <- get_featured_playlists() #get_categories() #get_category_playlists(category_id = "toplists") #toptoday <- get_playlist_tracks(playlist_id="37i9dQZF1DXcBWIGoYBM5M") #topglobal <- get_playlist_tracks(playlist_id="37i9dQZEVXbMDoHDwVN2tF") #viralglobal <- get_playlist_tracks(playlist_id="37i9dQZEVXbLiRSasKsNU9") access_token <- get_spotify_access_token( client_id=Sys.getenv("SPOTIFY_CLIENT_ID"), client_secret=Sys.getenv("SPOTIFY_CLIENT_SECRET") ) artists <- c("BTS","The Killers","Post Malone","The XX","Justin Bieber") audio_features <- lapply( artists, function(a) { get_artist_audio_features( artist=a, authorization=access_token ) } ) %>% bind_rows() ggplot(audio_features, aes(valence,danceability,color=artist_name)) + geom_point() + geom_text_repel( audio_features %>% filter(valence > 0.95 & danceability > 0.95), mapping=aes(x=valence,y=danceability,label=track_name) ) + geom_smooth() # # killers <- get_artist_audio_features( # artist="The Killers", # authorization=access_token # ) # # willie <- get_artist_audio_features( # artist="Willie Colón", # authorization=access_token # ) # # ggplot() + # geom_point(willie,mapping=aes(x=valence,y=key_name),color="red") + # geom_point(killers,mapping=aes(x=valence,y=key_name),color="blue")