J'utilise la fonction lapply pour appeler l'API de Spotify. J'ai une colonne d'albumids et je veux récupérer les noms de pistes de chaque albumid. La façon dont je l'ai fait était en séparant l'albumid dans un vecteur de caractères, puis en exécutant et en utilisant la fonction lapply pour appeler chaque valeur dans le vecteur de caractères. Le problème avec ceci est que je ne peux pas remettre cela dans l'image originale.Lapply vecteur de caractère de retour à l'image originale
Voici un exemple:
J'ai un dataframe qui ressemble à ceci:
df
Artist ID Artist Name Album Name Album IDs
1 5lDUVqxXYEOAf12p0N2kVT Jared Dylan We Can't 16PsUE4xzqxIvmNIlwQzmK
2 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Love Is a Game 4NYvHAON7Zo4KC2BMn5rlI
3 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Enjoy the View 5AipKv8MFdERzk9xxEN3OK
4 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Luna Loves Me 3u4XXqFOiltaNXyKAhkzGN
5 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Symphony 0x5PQLx5tFNEpfhQnXhU8t
6 5lDUVqxXYEOAf12p0N2kVT Jared Dylan In Panic EP 02mIkCCHDYzJWDzh0DDs5g
J'ai ensuite créé un vecteur de caractères de la colonne ID album comme ci-dessous:
spotify<-df$`Album IDs`
Ensuite, j'ai créé une fonction pour récupérer les trackids, artistid, nom de l'artiste, et les noms de piste pour chaque ID de l'album:
get.tracks <- function(spotify){
albumTracksURL <- paste("https://api.spotify.com/v1/albums/", spotify, "/tracks?limit=50", sep="")
getTracks <- GET(albumTracksURL, add_headers(Authorization = HeaderValue))
albumTracks <- jsonlite::fromJSON(toJSON(content(getTracks)))
ids <- data.frame(matrix(unlist(albumTracks$items$id),
nrow=albumTracks$total, byrow=T),stringsAsFactors=FALSE)
names <- data.frame(matrix(unlist(albumTracks$items$name),
nrow=albumTracks$total, byrow=T),stringsAsFactors=FALSE)
artists<-albumTracks$items$artists
artists1<-do.call(rbind, lapply(artists, function(x) do.call(cbind, lapply(x[c('id', 'name')], toString))))
result <- cbind(ids, names, artists1)
colnames(result) <- c("ID", "NAME", "ARTIST ID", "ARTIST NAME")
return(result)
}
df <- lapply(spotify, get.tracks)
result <- do.call(rbind, df)
result_final<-result
Voici ce que ce résultat ressemble à:
result_final
ID NAME ARTIST ID ARTIST NAME
1 2YjOdgzqMIokknjOLS9ksc We Can't 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
2 5zSJepyr4V94yICIwhEBNK Love Is a Game 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
3 4o7qeWp4eQflplPVtoiJhM Enjoy the View 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
4 4LtSJDlu8UvM4hNlJsSj31 Luna Loves Me 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
5 4a91BtkczDVQdgKWUiwuyy Symphony 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
6 36XHtu9IgcoUEylPDYfPpr In Panic 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
7 6LEgJv1ClgvjDzmr7WG4hE Mistakes 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
8 5GxzbBprsHtk05qQeATGZR Ready, Set, Stun 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
9 1PHIPb4HyaatPqQfw2t288 Drive Me Crazy 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
10 6M9hgVrs4oj4YCFdXod1u4 Always Faithful 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
Le problème est que je ne peux pas raconterai revenir à l'origine dataframe car il n'y a pas de clé primaire (ALBUMID). Je pense que je dois faire une fonction for-loop ou une fonction apply différente sur la df originale au lieu de la séparer en tant que vecteur de caractère mais je ne sais pas comment faire ça. L'objectif est de rendre le look résultat final comme celui-ci ci-dessous:
Artist.ID Artist.Name Album.Name Album.IDs ID NAME ARTIST.ID ARTIST.NAME
1 5lDUVqxXYEOAf12p0N2kVT Jared Dylan We Can't 16PsUE4xzqxIvmNIlwQzmK 2YjOdgzqMIokknjOLS9ksc We Can't 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
2 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Love Is a Game 4NYvHAON7Zo4KC2BMn5rlI 5zSJepyr4V94yICIwhEBNK Love Is a Game 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
3 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Enjoy the View 5AipKv8MFdERzk9xxEN3OK 4o7qeWp4eQflplPVtoiJhM Enjoy the View 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
4 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Luna Loves Me 3u4XXqFOiltaNXyKAhkzGN 4LtSJDlu8UvM4hNlJsSj31 Luna Loves Me 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
5 5lDUVqxXYEOAf12p0N2kVT Jared Dylan Symphony 0x5PQLx5tFNEpfhQnXhU8t 4a91BtkczDVQdgKWUiwuyy Symphony 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
6 5lDUVqxXYEOAf12p0N2kVT Jared Dylan In Panic EP 02mIkCCHDYzJWDzh0DDs5g 36XHtu9IgcoUEylPDYfPpr In Panic 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
7 5lDUVqxXYEOAf12p0N2kVT Jared Dylan In Panic EP 02mIkCCHDYzJWDzh0DDs5g 6LEgJv1ClgvjDzmr7WG4hE Mistakes 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
8 5lDUVqxXYEOAf12p0N2kVT Jared Dylan In Panic EP 02mIkCCHDYzJWDzh0DDs5g 5GxzbBprsHtk05qQeATGZR Ready, Set, Stun 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
9 5lDUVqxXYEOAf12p0N2kVT Jared Dylan In Panic EP 02mIkCCHDYzJWDzh0DDs5g 1PHIPb4HyaatPqQfw2t288 Drive Me Crazy 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
10 5lDUVqxXYEOAf12p0N2kVT Jared Dylan In Panic EP 02mIkCCHDYzJWDzh0DDs5g 6M9hgVrs4oj4YCFdXod1u4 Always Faithful 5lDUVqxXYEOAf12p0N2kVT Jared Dylan
Merci, je ne savais pas que c'était aussi simple. Appréciez-le –