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

使用R调用KNMI API获取气象数据遇下载难题求助

解决KNMI Tx1日最高气温数据下载问题

你已经成功获取到了文件列表,接下来只需筛选目标时间范围的文件,再通过API提供的下载端点获取内容即可。以下是完整的实现代码:

1. 筛选2010-2022年的目标文件

从返回的文件列表中提取元数据,筛选覆盖目标时间段的文件:

library(httr)
library(jsonlite)
library(dplyr)
library(lubridate)

# 原有请求代码
url <- 'https://api.dataplatform.knmi.nl/open-data/v1/datasets/Tx1/versions/2/files'
apikey <- "eyJvcmciOiI1ZTU1NGUxOTI3NGE5NjAwMDEyYTNlYjEiLCJpZCI6ImE1OGI5NGZmMDY5NDRhZDNhZjFkMDBmNDBmNTQyNjBkIiwiaCI6Im11cm11cjEyOCJ9" 

res <- GET(url, add_headers(Authorization = apikey))
tmp <- content(res, as = 'text', encoding = "UTF-8") 
tmp <- jsonlite::fromJSON(tmp, flatten = FALSE)

# 处理文件元数据并筛选时间范围
files_df <- tmp$files %>%
  mutate(
    start_time = ymd_hms(startTime),
    end_time = ymd_hms(endTime),
    # 生成每个文件的下载链接
    download_url = sprintf("https://api.dataplatform.knmi.nl/open-data/v1/datasets/Tx1/versions/2/files/%s/content", filename)
  ) %>%
  # 保留覆盖2010-2022年的文件
  filter(end_time >= ymd("2010-01-01") & start_time <= ymd("2022-12-31"))

2. 批量下载并合并数据

循环下载筛选后的文件,读取并合并成完整数据集:

# 初始化列表存储单文件数据
tx_data_list <- list()

for (idx in seq_len(nrow(files_df))) {
  # 发送下载请求
  download_response <- GET(files_df$download_url[idx], add_headers(Authorization = apikey))
  # 读取CSV格式的文件内容
  file_text <- content(download_response, as = "text", encoding = "UTF-8")
  single_data <- read.csv(text = file_text, sep = ",", header = TRUE)
  
  tx_data_list[[idx]] <- single_data
}

# 合并所有文件数据
tx_combined <- bind_rows(tx_data_list)

# 最终筛选2010-2022年的记录
tx_final <- tx_combined %>%
  mutate(date = ymd(date)) %>%
  filter(date >= ymd("2010-01-01") & date <= ymd("2022-12-31"))

注意事项

  • KNMI Open Data API的文件下载链接需遵循固定格式,通过文件名称拼接生成即可。
  • 部分文件可能包含超出目标范围的记录,最后一步的日期筛选可确保结果精准。
  • 如果遇到下载失败,可检查请求头中的Authorization是否正确,或重试请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:02:52