У меня проблемы с API (Алси, это документация: https: //alsi.gie. eu / GIE_API_documentation_v003.pdf), который предоставляет данные о природном газе. Это позволяет мне поместить URL-адрес в свой интернет-браузер, чтобы я мог видеть нужные мне данные в формате Json. Однако, если я хочу загрузить этот Json, я должен использовать «x-key», который они мне также дали, с командой cURL, как та, которая приведена в документации в качестве примера:

"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-ключ») не введено неправильно. Это все, что у меня есть (кроме 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), как вы можете видеть, в случае, если это была проблема, также без него, также без пароля / ключа вообще ... но я всегда получаю одно и то же сообщение "доступ запрещен", вот почему я думаю, что проблема заключается в пароле. На данный момент я действительно не знаю, как добиться какого-либо прогресса, это самое близкое, что я получил к получению данных из этого API в Excel через VBA (я пробовал с гораздо большим количеством фрагментов кода здесь и на других веб-сайтах / форумах раньше) и Я чувствую, что очень близок, но еще не дошел.

Заранее большое спасибо.

1
Newbie_2006 6 Дек 2018 в 17:39

1 ответ

Лучший ответ

Кодировать ключ не нужно. Не уверен, почему эта попытка не сработала для вас, хотя не убедитесь, что вы передали False в строке .Open.

Замечу, что ответ представляет собой сборник словарей. В этих словарях нет ключей, указанных в сценарии.

Option Explicit
Public Sub GetJSON()
    Dim json As Object   
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://agsi.gie.eu/api/data/eu?from=2017-06-01&till=2017-06-14", False
        .setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
        .setRequestHeader "x-key", "APIkey"
        .send
        Set json = JsonConverter.ParseJson(.responseText)
    End With
End Sub

Пример JSON:

1
QHarr 6 Дек 2018 в 16:45