问题描述
我已经在Spotify的开发人员应用程序部分中创建了一个客户端ID和密钥.我正在参考此文档,并希望通过选择多个艺术家来扩展此文档.
I have created a Client ID and Secret Key in Spotify's developer app section. I am referencing this document and want to extend this by choosing multiple artists.
https://www.r-bloggers.com/the-eurovision-2016-song-contest-in-an-r-shiny-app/
在此示例中,他们仅选择1个艺术家ID,但这有一些漏洞,
In this example, they are only choosing 1 artist ID but there are some holes to this,
1)因为我无法在任何地方找到艺术家ID的词汇表密钥,所以如何获得艺术家名称而不是艺术家ID?
1) How do you obtain the artist name rather than the artist ID because I can't find a glossary key anywhere for the artist ID?
2)您如何选择多个艺术家而不是一个.
2) How do you choose multiple artists rather than just one.
例如,如何选择弗兰克·辛纳屈(Frank Sinatra)和猫王(Elvis Presley)?
So for example, how do I choose Frank Sinatra and Elvis Presley?
代码如下:
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
我的目标是获取有关每首歌手歌曲的所有属性,例如舞蹈性等.
My goal here is to get all of the attributes about each of the artists songs such as danceability, etc.
任何帮助都会很棒,谢谢!
Any help would be great, thanks!
推荐答案
如果您要问如何从在问题中创建的响应对象中获取艺术家的名字,您可以这样做:
If you're asking how get get the artist name from the response object you created in your question, you can do so like this:
> Artist$name
如果您要问如何通过歌手姓名查询API,请相关的端点是按名称搜索歌手的艺术家,这将使您能够找到ID(因为API基于搜索功能以外的ID,因此您将需要它):
If you're asking how to query the API by artist name, the relevant endpoint is the artist search by name, which will allow you do find the ID (as the API is based on ID other than the search feature, so you'll need that):
/v1/search?type=artist
端点可以得到几个艺术家:
The endpoint to get several artists is:
/v1/artists?ids={ids}
实际上,它们提供了一个基于名称的(单个)艺术家搜索的jsFiddle示例:
They actually provide a nice jsFiddle example of a (single) artist search based on name:
http://jsfiddle.net/JMPerez/0u0v7e1b/
此搜索文档页面显示了他们如何构建搜索URI:
This search documentation page shows how they build the search URI:
https://developer.spotify.com/web-api/search-item/
将它们放在一起
这是一个基于R中的歌手姓名进行搜索的完整示例.假设我们要搜索书呆子说唱之王YTCracker:
Here's a fully working example of searching based on artist name in R. Let's say we want to search for YTCracker, the nerd rap king:
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
Artist
对象具有ID,URI,流派,关注者数量以及足以探索该歌手,他们的专辑以及相关歌手等的Spotify API其余部分的其他信息,等等:
The Artist
object has the ID, URI, genre, number of followers, and other information sufficient to explore the rest of the Spotify API for this artist, their albums, and related artists, etc, etc:
$artists
$artists$href
[1] "https://api.spotify.com/v1/search?query=ytcracker&offset=0&limit=20&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 & 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示例所示(如果有的话).
Note that I set an optional limit on the size of the search results. Also note that you can use the same search results to query things like album art images, as in the jsFiddle example, if so inclined.
多个Ar
好的,现在我有了基于搜索的YTCracker的ID和问题中的Sinatra的ID,并且我想同时查询两位艺术家的API.我可以按照以下步骤进行操作.只要您拥有ID,就可以同时为2位以上的歌手使用.
OK, so now I have the ID for YTCracker based on my search and the ID for Sinatra from your question, and I want to simultaneously query the API for both artists. I can do that as follows. As long as you have the ID's you can to this for more than 2 artists, as well.
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 & 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"
这篇关于在R中为多位艺术家访问Spotify API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!