R循环API调用

R循环API调用,r,api,loops,R,Api,Loops,我正在使用R成功地进行API调用。对于每个单独的呼叫,我需要更改一个或两个不同的ID(对于下面的代码activity\u ID和/或name\u ID)。代码运行良好,但我现在的位置是,我喜欢自动化这个过程,而不是手动更改每个调用的ID。我想知道是否有一种方法可以使用数据框或列表来存储相关的ID来循环这个过程 我已经搜索了整个堆栈,但还没有找到或执行适当的解决方案 任何帮助都将不胜感激 谢谢 少年警讯 apiKey我们可以编写一个函数,根据传递的activity\u id和name\u id使用

我正在使用R成功地进行API调用。对于每个单独的呼叫,我需要更改一个或两个不同的ID(对于下面的代码activity\u ID和/或name\u ID)。代码运行良好,但我现在的位置是,我喜欢自动化这个过程,而不是手动更改每个调用的ID。我想知道是否有一种方法可以使用数据框或列表来存储相关的ID来循环这个过程

我已经搜索了整个堆栈,但还没有找到或执行适当的解决方案

任何帮助都将不胜感激

谢谢

少年警讯


apiKey我们可以编写一个函数,根据传递的
activity\u id
name\u 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)
}
这里的
activity\u vec
name\u vec
是各自id的向量。这将返回输入<代码>输出中的数据帧列表,如果需要,可以在写入csv之前将其合并为一个数据帧


如果只有
name\u 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)

get_data Hi Ronak-感谢您对本文的思考。这似乎并没有解决问题。也许如果activity_id是一个常量值,并且只有name_id在更改,这会简化事情吗?任何进一步的帮助都将不胜感激。@JPC如果只有名称id正在更改,则会看到更新,其中
name\u vec
是您要使用的名称id的向量。谢谢Ronak-我感谢您的快速回复。我会告诉你我是怎么做的。嗨,Ronak Shah。过去几天我一直在玩这个,但运气不好。以下错误是一致的“UseMethod中的错误(“unnest”):没有适用于“unnest”的方法应用于类的对象”列表“。然后你需要提供一个有效的URL,我可以在上面测试我的解决方案,使这篇文章具有可复制性<代码>url?活动_id=b5cb9359-f0e5-4939-9be3-fc95f8bc7d6&name_id
不是有效的url,因此我不知道从中返回的数据类型。
out <- Map(get_data, activity_vec, name_vec)
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)