【发布时间】:2018-12-06 14:39:24
【问题描述】:
我在使用提供天然气数据的 API(Alsi,这是文档:https://alsi.gie.eu/GIE_API_documentation_v003.pdf)时遇到问题。它允许我将 URL 放入我的 Internet 浏览器中,这样我就可以看到我需要的 Json 格式的数据。但是,如果我想下载那个 Json,我应该使用他们还给我的带有 cURL 命令的“x-key”,例如文档中给出的这个示例:
"https://agsi.gie.eu/api/data/eu?from=2017-06-01&till=2017-06-14" --header "x-key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
由于我们想要自动化某些流程,因此我们的想法是拥有一个启用宏的 Excel 文档。这将很容易检索此信息,因此可以在 Excel 中使用。感谢 StackOverflow 中的其他未解决问题,我有以下 VBA 代码似乎与 API 交互,但是它返回“拒绝访问”,我最好的猜测是,这是因为密码(或“x-key”)是'没有被正确输入。这就是我所拥有的(除了其他模块中的 JsonConverter 和 Base64Encode):
Sub test()
Dim httpObject As Object
Set httpObject = CreateObject("MSXML2.XMLHTTP")
sUrl = "https://alsi.gie.eu/api/data/eu?from=2018-11-15&till=2018-12-04"
sAuth = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
sRequest = sUrl
httpObject.Open "GET", sRequest, True
httpObject.setRequestHeader "x-key", Base64Encode(sAuth)
httpObject.send
sGetResult = httpObject.responseText
MsgBox sGetResult
Dim oJSON As Object
Set oJSON = JsonConverter.ParseJson(sGetResult)
For Each sItem In oJSON
dItemDate = oJSON(sItem)("date")
sItemString = oJSON(sItem)("string")
vItemValue = oJSON(sItem)("value")
MsgBox "Item: " & sItem & " Date: " & dItemDate & " String: " & sItemString & " Value: " & vItemValue
Next
End Sub
我也尝试将 Base64Encode 应用于密码变量 (sAuth) "消息,这就是我认为密码是问题的原因。在这一点上,我真的不知道如何取得任何进展,这是我通过 VBA 在 Excel 中从这个 API 获取数据最接近的方式(我之前在这里和其他网站/论坛中尝试过更多的代码块)和我觉得我很接近了,只是还没有。
非常感谢。
【问题讨论】:
标签: json excel vba curl web-scraping