Я пытаюсь подсчитать количество слов в текстах исполнителя, взятых с lyrics.ovg. Я написал цикл для перебора песен. Однако, если песня не найдена, я получаю сообщение об ошибке. Я хотел бы разобраться с ...

0
Gustavo A Escobar-Palafox 2 Мар 2021 в 14:22

1 ответ

Лучший ответ

Мы можем использовать withTimeout из пакета R.utils, который прекращает попытки через несколько секунд и возвращает фрейм данных со значениями NA.

Я также изменил цикл while на map_df, который должен быть эффективным.

library(musicbrainz)
library(R.utils)
library(stringr)

song_title <- c("Not%20A%20Song", "’39", "(You’re%20So%20Square)%20Baby%20I%20Don’t%20Care")
root_url <- "https://api.lyrics.ovh/v1/"
all_urls <- paste0(root_url,"Queen/",song_title)

cbind(song_title, purrr::map_df(all_urls, function(my_url) {
  my_content_from_json <- withTimeout(jsonlite::fromJSON(my_url)$lyrics, timeout = 5, onTimeout = "silent")
  if(is.null(my_content_from_json)) return(data.frame(lyrics = NA, word_count = NA))
  lyrics <- gsub("[\r\n]", " ", my_content_from_json)
  lyrics <- str_squish(lyrics)
  word_count <- str_count(lyrics, '\\s+') + 1
  data.frame(lyrics, word_count)
})) -> result

result
0
Ronak Shah 2 Мар 2021 в 12:24