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)
}))
我正在尝试获取组织内任何人打开的 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)
}))