按艺术家获取所有 Spotify 歌曲的音频属性
Posted
技术标签:
【中文标题】按艺术家获取所有 Spotify 歌曲的音频属性【英文标题】:Obtain Audio Attributes to All Spotify Songs By Artist 【发布时间】:2017-03-01 11:19:48 【问题描述】:这是一个后续问题:Accessing Spotify API for Multiple Artists in R
我的目标是从 Spotify 的 API 中提取多个艺术家,然后按艺术家及其属性检索所有歌曲。
这就是我们迄今为止对上一个问题所做的结果:
检索有关艺术家的信息(不是按歌曲):
artistName = 'ytcracker'
HeaderValue = paste0('Bearer ', mytoken)
URI = paste0('https://api.spotify.com/v1/search?query=', artistName,'&offset=0&limit=20&type=artist')
response2 = GET(url = URI, add_headers(Authorization = HeaderValue))
Artist = content(response2)
Artist
如果您从上面的代码中知道艺术家 ID,则为多个艺术家。
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)
如何提取多位艺术家的歌曲及其属性?
这是音频功能的链接:
https://developer.spotify.com/web-api/get-several-audio-features/
这是我的尝试:
artistID = '1Mxqyy3pSjf8kZZL4QVxS0'
HeaderValue = paste0('Bearer ', mytoken)
URI = paste0('https://api.spotify.com/v1/audio-features', artistID)
response2 = GET(url = URI, add_headers(Authorization = HeaderValue))
Artist = content(response2)
Artist
回复:
raw(0)
https://github.com/rweyant/spotifyr
这是一个很好的参考,但即使在打开“httr”库后我也无法设置我的凭据。
set_credentials(client_id=CLIENTID,client_secret=CLIENTSECRET)
错误:找不到函数“set_credentials”
任何帮助都很好,谢谢!
使用 API 凭据修改开头部分:
clientID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx'
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
【问题讨论】:
@Hack-R 如果您有任何想法,因为我知道您能够解决上一个问题。谢谢! 这可能意味着该库未正确安装和加载,我对此进行了测试,并且没有递归安装依赖项。在新的 R 会话中,这应该可以工作install.packages(c('httr','jsonlite','RSelenium','RCurl','XML','stringr','stringi','plyr'),dep=TRUE); devtools::install_github('rweyant/spotifyr')
这是我执行此操作时出现的错误:分配错误(“client_redirect_uri”,client_redirect_uri,envir = .GlobalEnv):缺少参数“client_redirect_uri”,没有默认值
【参考方案1】:
getFeatures<-function(spotify_ID,token)
req <- httr::GET(paste0("https://api.spotify.com/v1/audio-features/",spotify_ID), add_headers(Authorization = HeaderValue))
json1<-httr::content(req)
dados=data.frame(id=json1$id,
danceability=json1$danceability,
energy=json1$energy,
key=json1$key,
loudness=json1$loudness,
mode=json1$mode,
speechiness=json1$speechiness,
acousticness=json1$acousticness,
instrumentalness=json1$instrumentalness,
liveness=json1$liveness,
valence=json1$valence,
tempo=json1$tempo,
duration_ms=json1$duration_ms,
time_signature=json1$time_signature,
uri=json1$uri,
analysis_url=json1$analysis_url,stringsAsFactors = F)
return(dados)
KanyeFatherStretch <- getFeatures("4KW1lqgSr8TKrvBII0Brf8")
Try this if it helps
【讨论】:
您能否提供一个示例令牌,它可能是一个随机数,但我将如何将其应用于此?我收到一条错误消息:“token$sign 中的错误:$ 运算符对原子向量无效” 另外,当我按照您的方式应用它时,它指出:结构错误(列表(方法 = 方法,url = url,标题 = keep_last(标题),:缺少参数“令牌” , 没有默认值 谢谢,我刚刚编辑了这个问题,以获得我在原始数据集中的样本。如果我在“使用 API 凭据修改开头部分:”之后运行所有内容,然后使用我的 API 凭据运行您的脚本,则它不起作用。您能否修改您的答案以使其符合要求。我对此很陌生,这就是我要求这个的原因。感谢您的反馈。 请用 add_headers(Authorization = HeaderValue) 代替上述代码中的 httr::config(token = token) 【参考方案2】:我对 R 中的 HTTP 请求不是特别熟悉,但是如果下面这行依赖于字符串连接...
URI = paste0('https://api.spotify.com/v1/audio-features', artistID)
您需要在第一个参数后面加上反斜杠,以便第二个参数正确连接 URI。
此外,the Audio Features endpoint takes a Spotify ID for a track, rather than an artist。我建议您为您感兴趣的艺术家获取前 10 个左右的曲目,并使用Get Several Audio Features 端点获取所有曲目的音频功能。这应该可以很好地代表艺术家的声音。如果您需要更小的表示,您可以对特征进行平均,但请注意平均可能会降低数据的准确性。
【讨论】:
我尝试在原始问题中这样做,它给了我“raw(0)”的输出。你知道如何在赛道上做到这一点吗?仍然无法获取音频属性。感谢您的反馈。以上是关于按艺术家获取所有 Spotify 歌曲的音频属性的主要内容,如果未能解决你的问题,请参考以下文章