R中调用EIA API及XML方式均遇404错误求解决方案
解决EIA API在R中返回404错误的可行方案
核心问题排查与修复步骤
- 强制使用HTTPS协议:EIA API已不再支持HTTP请求,原HTTP端点会直接返回404。所有请求需改用
https://api.eia.gov作为基础URL,这是导致你XML包调用失效的核心原因。 - 验证API密钥有效性:确认你的EIA API密钥已在官网激活,无权限限制或过期情况。可直接在浏览器中访问构造好的HTTPS URL(替换密钥),测试是否能正常返回数据。
- 替代eia包的手动请求方案:由于无法安装GitHub版本的eia包,可直接使用
httr包构造合规请求,示例代码如下:
XML格式请求示例
library(httr) library(XML) eia_api_key <- "你的EIA API密钥" target_series <- "PET.MCREXUS1.M" # 发送HTTPS请求 response <- GET( url = "https://api.eia.gov/series", query = list( series_id = target_series, api_key = eia_api_key, out = "xml" ) ) # 检查响应状态,失败则抛出错误 stop_for_status(response) # 解析XML内容 doc <- xmlParse(content(response, "text"))
JSON格式请求示例(更易处理)
library(httr) library(jsonlite) eia_api_key <- "你的EIA API密钥" target_series <- "PET.MCREXUS1.M" response <- GET( url = "https://api.eia.gov/series", query = list( series_id = target_series, api_key = eia_api_key, out = "json" ) ) stop_for_status(response) # 解析为可直接使用的数据框格式 result_data <- fromJSON(content(response, "text"))$series[[1]]$data
- 排查网络环境限制:公司防火墙可能拦截了对EIA API的HTTPS请求,需确认IT部门是否允许访问
api.eia.gov的443端口,必要时配置合规代理。
内容的提问来源于stack exchange,提问作者Bnakey
相关产品推荐
相关产品推荐

