R - 循环 API 调用



我正在使用R成功进行API调用。对于每个单独的调用,我需要更改一个或两个区分 ID(在下面的代码中activity_id和/或name_id(。代码工作正常,但是我现在处于喜欢自动化此过程的位置,而不是手动更改每个调用的ID。我想知道是否有办法使用数据框或列表来存储相关 ID。

我已经在 Stack 中搜索过,但我还没有找到或执行合适的解决方案。

任何帮助将不胜感激。

谢谢

少年警讯

apiKey <-"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI"
example<- GET("url?activity_id=b5cb9359-f0e5-4939-9be3-fc95f8bc7d6b&name_id=f1e17fa6-c40c-4810-9c43-60939e2a9a99",add_headers(Authorization = paste("Bearer", apiKey)))
example <-content(example,"text")
example <-fromJSON(example,flatten = TRUE)
example <-unnest(example,data)
write.csv(example,"example.csv",row.names=F)

我们可以编写一个函数,使用基于activity_idname_id传递的sprintf动态生成 url。

get_data <- function(activity_id, name_id) {
url <- sprintf('url?activity_id=%s&name_id=%s', activity_id, name_id)
example<- httr::GET(url,add_headers(Authorization = paste("Bearer", apiKey)))
example <- httr::content(example,"text")
example <- jsonlite::fromJSON(example,flatten = TRUE)
example <- tidyr::unnest(example,data)
return(example)
}

然后使用Map调用它。

out <- Map(get_data, activity_vec, name_vec)

这里activity_vecname_vec是各自id的向量。这将返回out中的数据帧列表,如果需要,可以在写入 csv 之前将其合并为一个数据帧。


如果只有name_id在改变,我们可以做

get_data <- function(name_id) {
url <- sprintf('url?activity_id=b5cb9359-f0e5-4939-9be3-fc95f8bc7d6&name_id=%s', name_id)
example<- httr::GET(url,add_headers(Authorization = paste("Bearer", apiKey)))
example <- httr::content(example,"text")
example <- jsonlite::fromJSON(example,flatten = TRUE)
example <- tidyr::unnest(example,data)
return(example)
}
out <- lapply(name_vec, get_data)

最新更新