httr::content 提供变量作为请求对象时抛出错误

httr::content throws error when supplying a variable as the request object

我正在尝试获取组织内任何人打开的 Jira 工单列表。我有一个用户 ID 列表,但这个组织中有将近 1400 人。

因为有这么多人,我不能简单地在 1 个请求中查询所有的人,所以我创建了一个循环来这样做。循环的 GET 请求部分工作正常,我得到每个 ID 的响应(无论该用户是否实际创建了任何 Jira 票证)。我 运行 进入一个问题是试图提取这些响应的内容, httr::content 抛出错误 is.response(x) is not true 。这似乎是由于我将列表作为 x 传递给 'content',尽管我也尝试了一些其他选项但没有成功。

org_list <- as.data.frame(read.csv("org_list.csv"))

csv文件是这样的(但是有1378个ID):

ID 
abc123 
xyz987 

这是循环:

for (i in 1:1378) {

assign(paste0("query_", org_list[i,]), GET("https://myjira.com/", 
                   path = "rest/api/2/search", 
                   query = list(jql = paste0("project in (ABC,DEF,XYZ) AND reporter = ", org_list[i,]), maxResults = 500),
                   authenticate(my_UN, my_PW),
                   verbose()
) 
)

  tmp_var <-  as.character(org_list[i,])
  api_request_content <- httr::content(tmp_var, as = "text")
  api_request_content_flat <- fromJSON(api_request_content, flatten = TRUE)
  assign(paste0("data_", tmp_var), as.data.frame(api_request_content_flat$issues))
  rm(paste0("query_", tmp_var))

}

这会创建一个响应对象,如 "query_abc123"、"query_xyz987" 等。如果我删除 'assign' 函数之外的所有内容,循环本身可以正常工作。

我也试过:

api_request_content <- httr::content(org_list[i,], as = "text")

api_request_content <- httr::content(paste0(org_list[i,]), as = "text")

他们都return同样的错误。 但是如果我手动传递像

这样的对象
api_request_content <- httr::content(query_abc123, as = "text")

一切正常。一个下午的谷歌搜索还没有 return 为我提供任何接近答案的东西。

如果没有合适的可重现示例,这全是猜测,但更常见的策略是这样的

alldata <- dplyr::bind_rows(lapply(as.character(org_list[[1]]), function(reporter) {

  req <- GET("https://myjira.com/", 
            path = "rest/api/2/search", 
            query = list(jql = paste0("project in (ABC,DEF,XYZ) AND reporter = ", reporter), maxResults = 500),
            authenticate(my_UN, my_PW),
            verbose()
  ) 

  api_request_content <- httr::content(req, as = "text")
  api_request_content_flat <- fromJSON(api_request_content, flatten = TRUE)
  as.data.frame(api_request_content_flat$issues)
}))