按艺术家获取所有 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 歌曲的音频属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spotify 上获取艺术家的所有歌曲?

Spotify API:获取歌曲播放次数、总小时数等

按音频功能过滤 Spotify ID

Spotify 和 Echo Nest API 不匹配,如何修复?

我可以存储和使用 spotify 提供的元数据吗?

从前端 JavaScript 代码获取 Spotify API 访问令牌