#r #api #spotify #httr #libspotify
#r #API #spotify #httr #libspotify
Вопрос:
Я создал идентификатор клиента и секретный ключ в разделе приложений для разработчиков Spotify. Я ссылаюсь на этот документ и хочу расширить его, выбрав несколько исполнителей.
https://www.r-bloggers.com/the-eurovision-2016-song-contest-in-an-r-shiny-app/
В этом примере они выбирают только 1 идентификатор исполнителя, но в этом есть некоторые пробелы,
1) Как вы получаете имя исполнителя, а не идентификатор исполнителя, потому что я нигде не могу найти ключ глоссария для идентификатора исполнителя?
2) Как выбрать несколько исполнителей, а не только одного.
Так, например, как мне выбрать Фрэнка Синатру и Элвиса Пресли?
Код приведен ниже:
library(httr)
clientID = '#############################'
secret = '########################'
response = POST(
'https://accounts.spotify.com/api/token',
accept_json(),
authenticate(clientID, secret),
body = list(grant_type = 'client_credentials'),
encode = 'form',
verbose()
)
mytoken = content(response)$access_token
## Frank Sinatra spotify artist ID
artistID = '1Mxqyy3pSjf8kZZL4QVxS0'
HeaderValue = paste0('Bearer ', mytoken)
URI = paste0('https://api.spotify.com/v1/artists/', artistID)
response2 = GET(url = URI, add_headers(Authorization = HeaderValue))
Artist = content(response2)
Artist
Моя цель здесь — получить все атрибуты каждой песни исполнителя, такие как танцевальность и т. Д.
Любая помощь была бы отличной, спасибо!
Ответ №1:
Если вы спрашиваете, как получить имя исполнителя из объекта ответа, который вы создали в своем вопросе, вы можете сделать это следующим образом:
> Artist$name
«Фрэнк Синатра»
Если вы спрашиваете, как запросить API по имени исполнителя, соответствующей конечной точкой является поиск исполнителя по имени, который позволит вам найти идентификатор (поскольку API основан на идентификаторе, отличном от функции поиска, поэтому вам это понадобится):
/v1/search?type=artist
Конечная точка для получения нескольких исполнителей:
/v1/artists?ids={ids}
На самом деле они предоставляют хороший пример jsFiddle поиска (одного) исполнителя по имени:
http://jsfiddle.net/JMPerez/0u0v7e1b/
На этой странице документации по поиску показано, как они создают URI поиска:
https://developer.spotify.com/web-api/search-item/
Собрать все это вместе
Вот полностью рабочий пример поиска по имени исполнителя в R. Допустим, мы хотим найти YTCracker, короля рэпа-ботана:
artistName = 'ytcracker'
HeaderValue = paste0('Bearer ', mytoken)
URI = paste0('https://api.spotify.com/v1/search?query=', artistName,'amp;offset=0amp;limit=20amp;type=artist')
response2 = GET(url = URI, add_headers(Authorization = HeaderValue))
Artist = content(response2)
Artist
Artist
Объект имеет идентификатор, URI, жанр, количество подписчиков и другую информацию, достаточную для изучения остальной части Spotify API для этого исполнителя, их альбомов и связанных исполнителей и т. Д. И т. Д:
$artists
$artists$href
[1] "https://api.spotify.com/v1/search?query=ytcrackeramp;offset=0amp;limit=20amp;type=artist"
$artists$items
$artists$items[[1]]
$artists$items[[1]]$external_urls
$artists$items[[1]]$external_urls$spotify
[1] "https://open.spotify.com/artist/1x82Mu3wakMkldMW5kEiP4"
$artists$items[[1]]$followers
$artists$items[[1]]$followers$href
NULL
$artists$items[[1]]$followers$total
[1] 2386
$artists$items[[1]]$genres
$artists$items[[1]]$genres[[1]]
[1] "nerdcore"
$artists$items[[1]]$href
[1] "https://api.spotify.com/v1/artists/1x82Mu3wakMkldMW5kEiP4"
$artists$items[[1]]$id
[1] "1x82Mu3wakMkldMW5kEiP4"
$artists$items[[1]]$images
$artists$items[[1]]$images[[1]]
$artists$items[[1]]$images[[1]]$height
[1] 640
$artists$items[[1]]$images[[1]]$url
[1] "https://i.scdn.co/image/da66c87cfb6f7e400979b53f12c0b0cb029424a8"
$artists$items[[1]]$images[[1]]$width
[1] 640
$artists$items[[1]]$images[[2]]
$artists$items[[1]]$images[[2]]$height
[1] 300
$artists$items[[1]]$images[[2]]$url
[1] "https://i.scdn.co/image/4055cb39744f85c94838841eecc74563b94a00d1"
$artists$items[[1]]$images[[2]]$width
[1] 300
$artists$items[[1]]$images[[3]]
$artists$items[[1]]$images[[3]]$height
[1] 64
$artists$items[[1]]$images[[3]]$url
[1] "https://i.scdn.co/image/d46121137f358701b55dcdd03ba9a632ea7e4879"
$artists$items[[1]]$images[[3]]$width
[1] 64
$artists$items[[1]]$name
[1] "YTCracker"
$artists$items[[1]]$popularity
[1] 31
$artists$items[[1]]$type
[1] "artist"
$artists$items[[1]]$uri
[1] "spotify:artist:1x82Mu3wakMkldMW5kEiP4"
$artists$items[[2]]
$artists$items[[2]]$external_urls
$artists$items[[2]]$external_urls$spotify
[1] "https://open.spotify.com/artist/2RnAr4QItmKW4vFKip3m8v"
$artists$items[[2]]$followers
$artists$items[[2]]$followers$href
NULL
$artists$items[[2]]$followers$total
[1] 36
$artists$items[[2]]$genres
list()
$artists$items[[2]]$href
[1] "https://api.spotify.com/v1/artists/2RnAr4QItmKW4vFKip3m8v"
$artists$items[[2]]$id
[1] "2RnAr4QItmKW4vFKip3m8v"
$artists$items[[2]]$images
list()
$artists$items[[2]]$name
[1] "YTCracker amp; Hairetsu"
$artists$items[[2]]$popularity
[1] 9
$artists$items[[2]]$type
[1] "artist"
$artists$items[[2]]$uri
[1] "spotify:artist:2RnAr4QItmKW4vFKip3m8v"
$artists$limit
[1] 20
$artists$`next`
NULL
$artists$offset
[1] 0
$artists$previous
NULL
$artists$total
[1] 2
Обратите внимание, что я установил необязательное ограничение на размер результатов поиска. Также обратите внимание, что вы можете использовать одни и те же результаты поиска для запроса таких вещей, как изображения обложек альбомов, как в примере jsFiddle, если это необходимо.
Несколько исполнителей
Хорошо, теперь у меня есть идентификатор YTCracker на основе моего поиска и идентификатор Sinatra из вашего вопроса, и я хочу одновременно запросить API для обоих исполнителей. Я могу сделать это следующим образом. Пока у вас есть идентификаторы, вы также можете использовать это для более чем 2 исполнителей.
URI = paste0('https://api.spotify.com/v1/artists?ids=', Artist$artists$items[[2]]$id,",", '1Mxqyy3pSjf8kZZL4QVxS0')
response2 = GET(url = URI, add_headers(Authorization = HeaderValue))
Artists = content(response2)
$artists
$artists[[1]]
$artists[[1]]$external_urls
$artists[[1]]$external_urls$spotify
[1] "https://open.spotify.com/artist/2RnAr4QItmKW4vFKip3m8v"
$artists[[1]]$followers
$artists[[1]]$followers$href
NULL
$artists[[1]]$followers$total
[1] 36
$artists[[1]]$genres
list()
$artists[[1]]$href
[1] "https://api.spotify.com/v1/artists/2RnAr4QItmKW4vFKip3m8v"
$artists[[1]]$id
[1] "2RnAr4QItmKW4vFKip3m8v"
$artists[[1]]$images
list()
$artists[[1]]$name
[1] "YTCracker amp; Hairetsu"
$artists[[1]]$popularity
[1] 9
$artists[[1]]$type
[1] "artist"
$artists[[1]]$uri
[1] "spotify:artist:2RnAr4QItmKW4vFKip3m8v"
$artists[[2]]
$artists[[2]]$external_urls
$artists[[2]]$external_urls$spotify
[1] "https://open.spotify.com/artist/1Mxqyy3pSjf8kZZL4QVxS0"
$artists[[2]]$followers
$artists[[2]]$followers$href
NULL
$artists[[2]]$followers$total
[1] 1204440
$artists[[2]]$genres
$artists[[2]]$genres[[1]]
[1] "adult standards"
$artists[[2]]$genres[[2]]
[1] "brill building pop"
$artists[[2]]$genres[[3]]
[1] "christmas"
$artists[[2]]$genres[[4]]
[1] "easy listening"
$artists[[2]]$genres[[5]]
[1] "jazz christmas"
$artists[[2]]$genres[[6]]
[1] "lounge"
$artists[[2]]$genres[[7]]
[1] "mellow gold"
$artists[[2]]$genres[[8]]
[1] "soft rock"
$artists[[2]]$genres[[9]]
[1] "soul"
$artists[[2]]$genres[[10]]
[1] "swing"
$artists[[2]]$genres[[11]]
[1] "vocal jazz"
$artists[[2]]$href
[1] "https://api.spotify.com/v1/artists/1Mxqyy3pSjf8kZZL4QVxS0"
$artists[[2]]$id
[1] "1Mxqyy3pSjf8kZZL4QVxS0"
$artists[[2]]$images
$artists[[2]]$images[[1]]
$artists[[2]]$images[[1]]$height
[1] 650
$artists[[2]]$images[[1]]$url
[1] "https://i.scdn.co/image/fc4e0f474fb4c4cb83617aa884dc9fd9822d4411"
$artists[[2]]$images[[1]]$width
[1] 999
$artists[[2]]$images[[2]]
$artists[[2]]$images[[2]]$height
[1] 416
$artists[[2]]$images[[2]]$url
[1] "https://i.scdn.co/image/883de3e492364891543bc0313ffe516626778a16"
$artists[[2]]$images[[2]]$width
[1] 640
$artists[[2]]$images[[3]]
$artists[[2]]$images[[3]]$height
[1] 130
$artists[[2]]$images[[3]]$url
[1] "https://i.scdn.co/image/810f29651e05c9eae5a31f8151c2e05dc46390f9"
$artists[[2]]$images[[3]]$width
[1] 200
$artists[[2]]$images[[4]]
$artists[[2]]$images[[4]]$height
[1] 42
$artists[[2]]$images[[4]]$url
[1] "https://i.scdn.co/image/a283ecdc6252ae305c53d283846cae2e8b22e94c"
$artists[[2]]$images[[4]]$width
[1] 64
$artists[[2]]$name
[1] "Frank Sinatra"
$artists[[2]]$popularity
[1] 77
$artists[[2]]$type
[1] "artist"
$artists[[2]]$uri
[1] "spotify:artist:1Mxqyy3pSjf8kZZL4QVxS0"
Комментарии:
1. Я могу спросить об этом в отдельном посте, но как получить звуковые возможности песен исполнителей? Я знаю, что это ссылка: developer.spotify.com/web-api/get-several-audio-features но возникли проблемы с его использованием в R @Hack-R
Ответ №2:
Я создал spotifyr
пакет именно для этого!
install.packages('spotifyr')
library(spotifyr)
library(tidyverse)
Sys.setenv(SPOTIFY_CLIENT_ID = '[YOUR_SPOTIFY_CLIENT_ID]')
Sys.setenv(SPOTIFY_CLIENT_SECRET = '[YOUR_SPOTIFY_CLIENT_SECRET]')
artist_names <- c('Frank Sinatra', 'Elvis Presley')
artist_audio_features <- map_df(artist_names, function(artist) {
get_artist_audio_features(artist) %>%
mutate(artist_name = artist)
})
Если у вас есть какие-либо дополнительные вопросы / проблемы, не стесняйтесь обращаться к github: https://github.com/charlie86/spotifyr