Как сделать один фрейм данных из определенного c элемента из каждого ответа в списке? - PullRequest
0 голосов
/ 17 июня 2020

У меня есть список из 4 элементов в R из запроса API spotify:

> lijstwijk
[[1]]
Response [https://api.spotify.com/v1/search?q=track%3APompeii%20artist%3ABastille&type=track&limit=1]
  Date: 2020-06-16 20:14
  Status: 200
  Content-Type: application/json; charset=utf-8
  Size: 2.78 kB
{
  "tracks" : {
    "href" : "https://api.spotify.com/v1/search?query=track%3APompeii+artist%3ABastille&type=track&offset=0&limit=1",
    "items" : [ {
      "album" : {
        "album_type" : "album",
        "artists" : [ {
          "external_urls" : {
            "spotify" : "https://open.spotify.com/artist/7EQ0qTo7fWT7DPxmxtSYEc"
          },
...

[[2]]
Response [https://api.spotify.com/v1/search?q=track%3AUnderdog%20artist%3AAlicia%20Keys&type=track&limit=1]
  Date: 2020-06-16 20:14
  Status: 200
  Content-Type: application/json; charset=utf-8
  Size: 3.84 kB
{
  "tracks" : {
    "href" : "https://api.spotify.com/v1/search?query=track%3AUnderdog+artist%3AAlicia+Keys&type=track&offset=0&limit=1",
    "items" : [ {
      "album" : {
        "album_type" : "single",
        "artists" : [ {
          "external_urls" : {
            "spotify" : "https://open.spotify.com/artist/3DiDSECUqqY1AuBP8qtaIa"
          },
...

[[3]]
Response [https://api.spotify.com/v1/search?q=track%3AThe%20Way%20It%20Is%20artist%3ABruce%20Hornsby%20&%20The%20Range=&type=track&limit=1]
  Date: 2020-06-16 20:14
  Status: 200
  Content-Type: application/json; charset=utf-8
  Size: 4.58 kB
{
  "tracks" : {
    "href" : "https://api.spotify.com/v1/search?query=track%3AThe+Way+It+Is+artist%3ABruce+Hornsby+&type=track&offset=0&limit=1",
    "items" : [ {
      "album" : {
        "album_type" : "album",
        "artists" : [ {
          "external_urls" : {
            "spotify" : "https://open.spotify.com/artist/2iM28IgKg89v1o7BTQAVPo"
          },
...

[[4]]
Response [https://api.spotify.com/v1/search?q=track%3ABefore%20You%20Go%20artist%3ALewis%20Capaldi&type=track&limit=1]
  Date: 2020-06-16 20:14
  Status: 200
  Content-Type: application/json; charset=utf-8
  Size: 3.76 kB
{
  "tracks" : {
    "href" : "https://api.spotify.com/v1/search?query=track%3ABefore+You+Go+artist%3ALewis+Capaldi&type=track&offset=0&limit=1",
    "items" : [ {
      "album" : {
        "album_type" : "single",
        "artists" : [ {
          "external_urls" : {
            "spotify" : "https://open.spotify.com/artist/4GNC7GD6oZMSxPGyXy4MNB"
          },

Мне нужен только элемент spotify: track uri из каждого ответа в списке. Итак, для первых двух результатов я сделал это вручную:

# item one #

> itemone <- lijstwijk[[1]]
> itemoneparsed <- content(itemone, as="parsed")
> uritstone <- itemoneparsed$tracks$items[[1]]$uri
> uritstone 

[1] "spotify:track:3gbBpTdY8lnQwqxNCcf795"

#item two#
> itemtwo <- lijstwijk[[2]]
> itemtwoparsed <- content(itemtwo, as="parsed")
> uritsttwo <- itemtwoparsed$tracks$items[[1]]$uri
> uritsttwo 

[1] "spotify:track:3FGiFUJRRp5RGikVrs6kig"

Как создать фрейм данных, содержащий элемент spotify: track: из каждого ответа в списке?

Как я могу создать один фрейм данных, содержащий элемент spotify: track: из каждого ответа списка? Например:

Spotifytrackuri
1. "spotify:track:3gbBpTdY8lnQwqxNCcf795"
2. "spotify:track:3FGiFUJRRp5RGikVrs6kig"
3. "spotify:track:xxxxxxxxxxxxxxxxxxxxxx"
4. "spotify:track:xxxxxxxxxxxxxxxxxxxxxx"

Обратите внимание, что для этого примера у меня есть 4 ответа. Но будет больше. Поэтому для каждого ответа элемент spotify: track: должен быть удален из ответа и помещен в один фрейм данных.

Как я могу заархивировать этот результат?

1 Ответ

0 голосов
/ 17 июня 2020

@ Bas, для нескольких пунктов работает (скажем, около 10). Для списка из 99 элементов я получаю следующую ошибку:

> lijstwijkuri <- lapply(lijstwijk, function(item) content(item, as="parsed")$tracks$items[[1]]$uri)
Error in content(item, as = "parsed")$tracks$items[[1]] : 
  subscript out of bounds
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...