You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中按日期迭代API GET请求并合并数据集的问题

解决批量API拉取与数据合并的问题

看起来你已经迈出了生成请求URL的第一步,但当前的URL生成逻辑会导致大量重复数据(比如第一个URL拉取27-30号,第二个拉28-30号,数据会严重重叠),而且还没把拉取逻辑自动化。我来帮你一步步优化整个流程:

1. 修正日期范围生成逻辑

首先我们需要生成不重叠的日期区间(比如按天拆分,或者按周/小批次,根据单批次数据量调整),避免重复拉取。这里先以按天拉取为例:

# 定义时间范围
end_date <- Sys.Date()
start_date <- as.Date("2020-01-27")

# 生成所有需要拉取的日期(每天一个独立区间)
date_sequence <- seq(start_date, end_date, by = "day")

# 生成每个日期对应的API URL(每个URL仅拉取当天的数据)
api_urls <- sapply(date_sequence, function(date) {
  paste0("https://website.com/api/?action=search_pcrs&amp;e1=eTimes.03&amp;o1=between&amp;v1=", date, "^", date, "&amp;e2=eMedications.03&amp;o2=in&amp;v2type=id&amp;v2=14731^14730^14729^3864&amp;col...")
})

如果单天数据量超过2500条,可以改成按半天/按周拆分,只需要调整seq的by参数(比如by = "3 days"),然后每个URL的v1设为该批次的起始和结束日期即可。

2. 封装API拉取函数

把你手动拉取数据的代码封装成可复用的函数,处理单个URL并返回结构化数据框:

library(XML)
library(httr)

fetch_pcr_data <- function(url) {
  # 发送API请求
  api_get <- GET(url)
  
  # 检查请求是否成功,避免无效数据中断流程
  if (http_status(api_get)$category != "Success") {
    warning(paste("请求失败,URL:", url))
    return(NULL)
  }
  
  # 解析XML并转为数据框
  api_raw <- rawToChar(api_get$content)
  api_tree <- xmlTreeParse(api_raw, useInternalNodes = TRUE)
  api_df <- xmlToDataFrame(api_tree, nodes = getNodeSet(api_tree, "//pcr"))
  
  return(api_df)
}

这个函数会自动跳过请求失败的URL,避免整个批量任务中断。

3. 批量拉取并合并数据

用lapply遍历所有URL,调用上面的函数,最后合并所有有效数据:

# 批量拉取所有数据
all_data_list <- lapply(api_urls, fetch_pcr_data)

# 过滤掉请求失败返回的NULL值
all_data_list <- Filter(Negate(is.null), all_data_list)

# 合并所有数据框为最终数据集
final_data <- do.call(rbind, all_data_list)

如果你习惯用dplyr,可以用bind_rows替代do.call(rbind, ...),代码更简洁:

library(dplyr)
final_data <- bind_rows(all_data_list)

4. 进阶优化(可选)

  • 添加请求延迟:如果API有频率限制,可以在fetch_pcr_data函数里加入Sys.sleep(1)(暂停1秒),避免被限流。
  • 并行拉取:如果数据量极大,可以用parallel或furrr包实现并行请求,大幅提升拉取速度。
  • 日志记录:可以在函数里添加打印语句,记录每个URL的拉取状态,方便后续排查问题。

这样你就完全不需要手动重复拉取操作,整个流程实现自动化啦!

内容的提问来源于stack exchange,提问作者Marshall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:22:29