如何用R的httr包调用指定API获取多个NIP对应的主体信息?
解决R语言调用KRS API获取主体信息的问题
我来帮你搞定这个问题!咱们用httr包构造请求,再配合jsonlite解析返回的JSON数据,就能轻松批量处理多个NIP编号。下面是一步步的解决方案:
1. 准备依赖包
首先确保你安装了需要的包,如果没装的话先运行:
install.packages(c("httr", "jsonlite"))
然后加载它们:
library(httr) library(jsonlite)
2. 编写单个NIP的查询函数
我先写一个可复用的函数,用来查询单个NIP对应的主体信息,同时处理可能的请求错误:
get_krs_podmiot <- function(nip) { # 构造API请求URL api_url <- "https://apiv3.mojepanstwo.pl/dane/krs_podmioty" # 设置查询参数,注意参数名的格式要和API要求一致,特殊字符要用反引号包裹 query_params <- list(`conditions[krs_podmioty.nip]` = nip) # 发送GET请求 response <- GET(api_url, query = query_params) # 检查请求是否成功 if (http_status(response)$category != "Success") { warning(paste("查询NIP", nip, "失败,状态码:", status_code(response))) return(NULL) } # 解析JSON响应并提取主体数据 response_data <- fromJSON(content(response, "text")) return(response_data$Dataobjects) }
这里的关键是参数名的写法:conditions[krs_podmioty.nip]必须用反引号包裹,不然R会识别不了这个带特殊字符的参数名,这也是很多人踩坑的地方。
3. 批量处理多个NIP
假设你的3个NIP编号是c("6321880539", "1112223334", "5556667778"),咱们用lapply批量查询,最后可以把结果整理成列表或者合并成数据框:
# 替换成你的3个NIP编号 nip_list <- c("6321880539", "1112223334", "5556667778") # 批量查询所有NIP krs_results <- lapply(nip_list, get_krs_podmiot) # 给结果命名,方便后续查看 names(krs_results) <- nip_list # 如果想把所有结果合并成一个数据框(适合每个NIP只返回一条记录的情况) library(dplyr) combined_results <- bind_rows(krs_results, .id = "nip")
4. 验证结果
你可以查看某个NIP的完整结果,比如:
# 查看第一个NIP的详细信息 print(krs_results[["6321880539"]])
这样得到的内容就和直接访问https://apiv3.mojepanstwo.pl/dane/krs_podmioty?conditions[krs_podmioty.nip]=6321880539完全一致了。
如果之前你的代码出错,大概率是参数格式没写对(比如没给特殊参数名加反引号),或者没正确解析JSON响应。按照上面的步骤来应该就能解决问题啦!
内容的提问来源于stack exchange,提问作者Sebastian Kozik
相关产品推荐
相关产品推荐

