我正在使用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_id
和name_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_vec
和name_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)