diff --git a/.DS_Store b/.DS_Store index c785b2e..b22fbe2 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/DESCRIPTION b/DESCRIPTION index 0a8f942..7cf2ef1 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: spotifyr -Title: A quick and easy wrapper for pulling track audio features from Spotify's Web API in bulk +Title: A Quick and Easy Wrapper for Pulling Track Audio Features from Spotify's Web API in Bulk Version: 0.0.0.9000 Authors@R: person("Charlie", "Thompson", email = "charles.thompson@barcelonagse.eu", role = c("aut", "cre")) Description: A quick and easy wrapper for pulling track audio features from @@ -8,19 +8,14 @@ Description: A quick and easy wrapper for pulling track audio features from seconds, along with Spotify's audio features and track/album popularity metrics. You can also pull song and playlist information for a given Spotify User (including yourself!). -Depends: R (>= 3.3.3), - purrr, - dplyr, - tidyr, - httr, - lubridate +Depends: R (>= 3.3.3) Imports: - purrr, dplyr, + purrr, tidyr, httr, lubridate -License: MIT License +License: MIT + file LICENSE Encoding: UTF-8 LazyData: true RoxygenNote: 6.0.1 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9ab6c36 --- /dev/null +++ b/LICENSE @@ -0,0 +1,2 @@ +YEAR: 2017 +COPYRIGHT HOLDER: Your name goes here diff --git a/NAMESPACE b/NAMESPACE index 4954820..34432b7 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -13,3 +13,10 @@ export(get_user_audio_features) export(get_user_playlist_count) export(get_user_playlists) export(parse_playlist_list_to_df) +import(dplyr) +import(httr) +import(purrr) +import(tidyr) +importFrom(lubridate,year) +importFrom(utils,setTxtProgressBar) +importFrom(utils,txtProgressBar) diff --git a/R/get_album_popularity.R b/R/get_album_popularity.R index 4bfe8a3..a8da12e 100644 --- a/R/get_album_popularity.R +++ b/R/get_album_popularity.R @@ -19,7 +19,7 @@ get_album_popularity <- function(albums, access_token = get_spotify_access_token map_df(1:num_loops, function(this_loop) { uris <- albums %>% - filter(!duplicated(album_uri)) %>% + dplyr::filter(!duplicated(album_uri)) %>% slice(((this_loop * 20) - 19):(this_loop * 20)) %>% select(album_uri) %>% .[[1]] %>% diff --git a/R/get_albums.R b/R/get_albums.R index bce1364..88999a3 100644 --- a/R/get_albums.R +++ b/R/get_albums.R @@ -47,17 +47,17 @@ get_albums <- function(artist_uri, access_token = get_spotify_access_token()) { }) if (nrow(df) > 0) { - df <- df %>% filter(!duplicated(tolower(album_name))) %>% + df <- df %>% dplyr::filter(!duplicated(tolower(album_name))) %>% mutate(base_album_name = gsub(' \\(.*(deluxe|international|anniversary|version|edition|remaster|re-master|live|mono|stereo).*\\)', '', tolower(album_name)), base_album_name = gsub(' \\[.*(deluxe|international|anniversary|version|edition|remaster|re-master|live|mono|stereo).*\\]', '', base_album_name), base_album_name = gsub(':.*(deluxe|international|anniversary|version|edition|remaster|re-master|live|mono|stereo).*', '', base_album_name), base_album_name = gsub(' - .*(deluxe|international|anniversary|version|edition|remaster|re-master|live|mono|stereo).*', '', base_album_name)) %>% group_by(base_album_name) %>% - filter(album_release_year == min(album_release_year)) %>% + dplyr::filter(album_release_year == min(album_release_year)) %>% mutate(base_album = tolower(album_name) == base_album_name, num_albums = n(), num_base_albums = sum(base_album)) %>% - filter((num_base_albums == 1 & base_album == 1) | ((num_base_albums == 0 | num_base_albums > 1) & row_number() == 1)) %>% + dplyr::filter((num_base_albums == 1 & base_album == 1) | ((num_base_albums == 0 | num_base_albums > 1) & row_number() == 1)) %>% ungroup %>% arrange(album_release_year) %>% mutate(album_rank = row_number()) diff --git a/R/get_artists.R b/R/get_artists.R index 60d1c0e..3ec9eea 100644 --- a/R/get_artists.R +++ b/R/get_artists.R @@ -32,7 +32,7 @@ get_artists <- function(artist_name, access_token = get_spotify_access_token()) artist_uri = gsub('spotify:artist:', '', this_artist$uri), # remove meta info from the uri string artist_img = ifelse(length(this_artist$images) > 0, this_artist$images[[1]]$url, NA) # we'll grab this just for fun ) - }) %>% filter(!duplicated(tolower(artist_name))) + }) %>% dplyr::filter(!duplicated(tolower(artist_name))) return(artists) } diff --git a/R/get_track_audio_features.R b/R/get_track_audio_features.R index e3735dd..eb38e94 100644 --- a/R/get_track_audio_features.R +++ b/R/get_track_audio_features.R @@ -32,7 +32,7 @@ get_track_audio_features <- function(tracks, access_token = get_spotify_access_t track_audio_features <- map_df(1:num_loops, function(this_loop) { uris <- tracks %>% - filter(!duplicated(track_uri)) %>% + dplyr::filter(!duplicated(track_uri)) %>% slice(((this_loop * 100) - 99):(this_loop * 100)) %>% select(track_uri) %>% .[[1]] %>% diff --git a/R/get_track_popularity.R b/R/get_track_popularity.R index f8e9ab1..323b977 100644 --- a/R/get_track_popularity.R +++ b/R/get_track_popularity.R @@ -16,11 +16,11 @@ get_track_popularity <- function(tracks, access_token = get_spotify_access_token()) { - num_loops <- ceiling(nrow(tracks %>% filter(!duplicated(track_uri))) / 50) + num_loops <- ceiling(nrow(tracks %>% dplyr::filter(!duplicated(track_uri))) / 50) map_df(1:num_loops, function(this_loop) { uris <- tracks %>% - filter(!duplicated(track_uri)) %>% + dplyr::filter(!duplicated(track_uri)) %>% slice(((this_loop * 50) - 49):(this_loop * 50)) %>% select(track_uri) %>% .[[1]] %>% paste0(collapse = ',') diff --git a/R/get_user_playlists.R b/R/get_user_playlists.R index 011daae..4856db1 100644 --- a/R/get_user_playlists.R +++ b/R/get_user_playlists.R @@ -35,7 +35,7 @@ get_user_playlists <- function(username, access_token = get_spotify_access_token }) playlists_df <- parse_playlist_list_to_df(playlists_list) %>% - filter(!is.na(playlist_name)) + dplyr::filter(!is.na(playlist_name)) return(playlists_df) diff --git a/R/parse_playlist_list_to_df.R b/R/parse_playlist_list_to_df.R index 34344cc..53a8d2b 100644 --- a/R/parse_playlist_list_to_df.R +++ b/R/parse_playlist_list_to_df.R @@ -15,7 +15,9 @@ #' #' playlist_list <- map(1:ceiling(num_loops), function(this_loop) { #' endpoint <- paste0('https://api.spotify.com/v1/users/', username, '/playlists') -#' res <- GET(endpoint, query = list(access_token = get_spotify_access_token(), offset = offset, limit = 50)) %>% content +#' res <- GET(endpoint, query = list(access_token = get_spotify_access_token(), +#' offset = offset, +#' limit = 50)) %>% content #' #' if (!is.null(res$error)) { #' stop(paste0(res$error$message, ' (', res$error$status, ')')) @@ -64,5 +66,5 @@ parse_playlist_list_to_df <- function(playlist_list) { return(tibble()) } }) - }) %>% filter(!is.na(playlist_uri)) + }) %>% dplyr::filter(!is.na(playlist_uri)) } diff --git a/R/spotifyr.R b/R/spotifyr.R new file mode 100644 index 0000000..4aa8256 --- /dev/null +++ b/R/spotifyr.R @@ -0,0 +1,39 @@ +#' \code{spotifyr} package +#' +#' A Quick and Easy Wrapper for Pulling Track Audio Features from Spotify's Web API in Bulk +#' +#' See the README on +#' \href{https://github.com/charlie86/spotifyr#readme}{GitHub} +#' +#' @docType package +#' @name spotifyr +#' @import purrr +#' @import dplyr +#' @import tidyr +#' @import httr +#' @importFrom lubridate year +#' @importFrom utils setTxtProgressBar txtProgressBar +NULL + +globalVars <- c("album_name", +"album_rank", +"album_release_date", +"album_release_year", +"album_uri", +"analysis_url", +"base_album", +"base_album_name", +"key", +"num_albums", +"num_base_albums", +"playlist_img", +"playlist_name", +"playlist_uri", +"track_href", +"track_uri", +"type", +"uri", +".") + +## quiets concerns of R CMD check re: the .'s that appear in pipelines +if(getRversion() >= "2.15.1") utils::globalVariables(globalVars) diff --git a/man/parse_playlist_list_to_df.Rd b/man/parse_playlist_list_to_df.Rd index 5935b25..e56d413 100644 --- a/man/parse_playlist_list_to_df.Rd +++ b/man/parse_playlist_list_to_df.Rd @@ -23,7 +23,9 @@ pb <- txtProgressBar(min = 0, max = num_loops, style = 3) playlist_list <- map(1:ceiling(num_loops), function(this_loop) { endpoint <- paste0('https://api.spotify.com/v1/users/', username, '/playlists') - res <- GET(endpoint, query = list(access_token = get_spotify_access_token(), offset = offset, limit = 50)) \%>\% content + res <- GET(endpoint, query = list(access_token = get_spotify_access_token(), + offset = offset, + limit = 50)) \%>\% content if (!is.null(res$error)) { stop(paste0(res$error$message, ' (', res$error$status, ')')) diff --git a/man/spotifyr.Rd b/man/spotifyr.Rd new file mode 100644 index 0000000..54dfa6f --- /dev/null +++ b/man/spotifyr.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/spotifyr.R +\docType{package} +\name{spotifyr} +\alias{spotifyr} +\alias{spotifyr-package} +\title{\code{spotifyr} package} +\description{ +A Quick and Easy Wrapper for Pulling Track Audio Features from Spotify's Web API in Bulk +} +\details{ +See the README on +\href{https://github.com/charlie86/spotifyr#readme}{GitHub} +}