我正在尝试对累积的一组api URL运行jsonlite函数。具体来说,我有一个名为url_df的数据框,该数据框具有一个称为URL的列,其中包含162800行api url。当我编写脚本并一次手动插入每个url时,它工作得很好。这是我用来一次在一个网址上手动运行的脚本:
May28 <- 'https://example.example.com/example'.
May28 <- httr::GET(May28)
May28 <- httr::content(May28, as = 'text')
May28 <- jsonlite::fromJSON(May28)
dplyr::glimpse(May28)
May28 <- as.data.frame(May28)
write.table(May28, file="May28.csv", sep=",")
但是,由于我要遍历超过10万行的api URL,因此我想创建一个循环函数,将上述函数重复到列URL中的每一行(每个api url),这样我就不必手动将每个网址剪切并粘贴到脚本100K次以上。因此,我将此信息保存到了名为“ url_df”的数据框中,并尝试了以下代码:
j <- 1
for (j in 1:nrow(url_df)){
url <- url_df$URL[[j]] %>%
getdata <- GET(url) %>%
rawdata <- httr::content(getdata, as='text') %>%
data <- jsonlite::fromJSON(rawdata)
data_df <- as.data.frame(data)
print(j)
j <- j+1
Sys.sleep(0.5)
}
出于某种原因,它将无法运行。我遇到的错误之一是:jsonlite :: fromJSON(rawdata)中的错误:找不到对象'rawdata'。
一个可能很重要的警告:每个api网址都不会仅返回1个数据点值(例如1)。而是返回值列表(例如,星期日,1,星期二,2等)。
关于为什么会发生这种情况或如何克服这种情况的任何想法?
解决了第一个问题之后,我想尽可能地整理收集到的所有数据...
谢谢!!
[您是否尝试过%>%
吗?另外,您可以尝试使用模拟API网址(例如https://jsonplaceholder.typicode.com/todos/1