首页 > 解决方案 > 无法在 R 中访问 EIA API

问题描述

我无法通过 R ( https://www.eia.gov/opendata/ ) 访问能源信息管理局的 API。

在我的办公室计算机上,如果我在浏览器中尝试该链接,它将显示数据(完整网址:https ://api.eia.gov/series/?series_id=PET.MCREXUS1.M&api_key=e122a1411ca0ac941eb192ede51feebe&out=json )。

我也通过 R 成功连接到 Bloomberg 的 API,因此 R 能够访问网络。

由于 API 正在工作并且没有被我公司的防火墙阻止,而且 R 实际上能够连接到 Internet,所以我不知道出了什么问题。

该脚本在我的家用计算机上运行良好,但在我的办公室计算机上却不成功。所以我认为这是一个网络问题,但如果有人能指出我可能出现的问题,我将不胜感激(我的 IT 部门无能为力)。

library(XML)

api.key = "e122a1411ca0ac941eb192ede51feebe"
series.id = "PET.MCREXUS1.M"

my.url = paste("http://api.eia.gov/series?series_id=", series.id,"&api_key=", api.key, "&out=xml", sep="")

doc = xmlParse(file=my.url, isURL=TRUE) # yields error

错误信息:

No such file or directoryfailed to load external entity "http://api.eia.gov/series?series_id=PET.MCREXUS1.M&api_key=e122a1411ca0ac941eb192ede51feebe&out=json"
Error: 1: No such file or directory2: failed to load external entity "http://api.eia.gov/series?series_id=PET.MCREXUS1.M&api_key=e122a1411ca0ac941eb192ede51feebe&out=json"

我尝试了其他一些方法,例如 xml2 包中的 read_xml() ,但这给出了“无法解析主机”错误。

标签: rxmlhttp

解决方案


要获取XML,您需要将 url 更改为 XML:

my.url = paste("http://api.eia.gov/series?series_id=", series.id,"&api_key=", 
               api.key, "&out=xml", sep="")

res <- httr::GET(my.url)
xml2::read_xml(res)

或者 :

res <- httr::GET(my.url)
XML::xmlParse(res)

否则按原样发布(即&out=json):

    res <- httr::GET(my.url)
   jsonlite::fromJSON(httr::content(res,"text")) 

或这个:

xml2::read_xml(httr::content(res,"text"))

请注意,这个答案只是提供了一种获取数据的方法,无论它是否以所需的形式是基于意见的,并且取决于处理数据的人。


推荐阅读