使用R语言从OECD下载数据时遭遇HTTP 404错误的求助
解决OECD包
search_dataset()和get_datasets()的HTTP 404错误 问题原因
OECD包中get_datasets()和search_dataset()函数依赖的旧SDMX API端点已被移除,导致请求返回404 Not Found;而get_dataset()直接调用的是数据集数据获取端点,未受API变更影响,因此能正常运行。
解决方案
方法1:重写失效函数
通过手动修改函数内的API地址,适配OECD最新的API接口:
- (可选)查看原函数实现:
library(OECD) getAnywhere(get_datasets)
- 重新定义
get_datasets()函数,替换为最新API地址:
get_datasets <- function(){ # 使用OECD最新的数据流API端点 url <- "https://api.oecd.org/sdmx-json/dataflow/OECD/all/latest" resp <- httr::GET(url) httr::stop_for_status(resp) json_data <- jsonlite::fromJSON(httr::content(resp, "text")) # 解析JSON提取数据集ID、名称和描述 datasets <- json_data$structure$dataflows$dataflow dataset_df <- data.frame( id = datasets$id, name = datasets$name$`en`, description = datasets$description$`en`, stringsAsFactors = FALSE ) return(dataset_df) }
- 重写
search_dataset()函数,基于新的数据集列表实现关键词搜索:
search_dataset <- function(pattern){ all_datasets <- get_datasets() # 匹配名称或描述中的关键词(忽略大小写) matched_rows <- grepl(pattern, all_datasets$name, ignore.case = TRUE) | grepl(pattern, all_datasets$description, ignore.case = TRUE) return(all_datasets[matched_rows, ]) }
修改完成后,重新调用get_datasets()或search_dataset("transport")即可正常获取结果。
方法2:直接调用OECD官方API
如果不想修改包内函数,可直接通过OECD的SDMX API查询数据集列表:
library(httr) library(jsonlite) # 获取所有OECD数据集的数据流信息 resp <- GET("https://api.oecd.org/sdmx-json/dataflow/OECD/all/latest") stop_for_status(resp) dataflows <- fromJSON(content(resp, "text"))$structure$dataflows$dataflow # 搜索包含"transport"关键词的数据集 transport_datasets <- subset(dataflows, grepl("transport", name$`en`, ignore.case = TRUE)) # 转换为易读的数据框输出 transport_df <- data.frame( 数据集ID = transport_datasets$id, 数据集名称 = transport_datasets$name$`en`, stringsAsFactors = FALSE ) print(transport_df)
内容的提问来源于stack exchange,提问作者user24236624
相关产品推荐
相关产品推荐

