Использование VBA в Excel для извлечения Json из API (проблема с паролем API) - PullRequest
0 голосов
/ 06 декабря 2018

У меня проблемы с API (Alsi, это документация: https://alsi.gie.eu/GIE_API_documentation_v003.pdf), которая предоставляет данные о природном газе. Это позволяет мне вставить URL в мой интернет-браузер, чтобы я мог видеть в формате Jsonданные, которые мне нужны. Однако, если я хочу скачать этот Json, я должен использовать «x-ключ», который они также дали мне с помощью команды 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 Ответ

0 голосов
/ 06 декабря 2018

Вам не нужно кодировать ключ.Не уверен, почему эта попытка не сработала для вас, но не забудьте указать 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:

image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...