r - 无法在 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() ,但这给出了“无法解析主机”错误。
解决方案
要获取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"))
请注意,这个答案只是提供了一种获取数据的方法,无论它是否以所需的形式是基于意见的,并且取决于处理数据的人。
推荐阅读
- spring-boot - 应用程序启动时的单例
- php - 在 HTML 选择中选择一个值后获得 ID
- android - 通用号码添加功能
- python - 如何通过数组字段获取元素并过滤数组字段以仅返回匹配的元素?
- node.js - 如何让主节点等待工作人员在 nodejs 集群中完成
- apache-spark - 无法将 spark 数据集收集为列表或映射,但没有适用的构造函数错误
- php - ec2 实例 phpmyadmin 的主机名是什么
- ms-access - 将用户输入的 InputBox 数据发送到 access 数据库中的一个简单表
- asp.net - 另一个项目中具有本地化资源的 Blazor Server-Size
- hyperledger-fabric - 链码提交期间的 Hyperledger Fabric 2.0 背书失败