Это сработало для меня.Сервер отвечает JSON (который VBA не поддерживает изначально, но есть доступные библиотеки / модули, которые помогут вам разобрать его).
Option Explicit
Private Sub GetRate()
Dim xmlhttp As MSXML2.ServerXMLHTTP60 ' Add a reference for early binding.
Set xmlhttp = New MSXML2.ServerXMLHTTP60
Const BASE_URL As String = "https://www.oanda.com/currency/converter/update?"
Dim urlWithQueryString As String
urlWithQueryString = BASE_URL & "base_currency_0=" & Application.EncodeURL("AUD") & ""e_currency=" & Application.EncodeURL("GBP") & "&end_date=" & Application.EncodeURL("2019-04-06") & "&view=details&id=1&action=C"
With xmlhttp
.Open "GET", urlWithQueryString, True
.setRequestHeader "Accept", "text/javascript, text/html, application/xml, text/xml, */*"
.setRequestHeader "Referer", "https://www.oanda.com/currency/converter/"
.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
.setRequestHeader "X-Prototype-Version", "1.7"
.setRequestHeader "X-Requested-With", "XMLHttpRequest"
.send
.waitForResponse
MsgBox .responseText
End With
End Sub
- Ни одно из значений параметров запроса (в приведенном выше примере)) необходимо кодирование URL (без небезопасных символов URL), но я все равно это сделал.
- Вы можете преобразовать вышеприведенное в функцию, которая принимает аргументы для
base_currency
, quote_currency
и end_date
. - Я не мог понять, для каких целей служат параметры
id
и action
.Я мог видеть, что id
увеличивался на 1 с каждым запросом, который я делал в своем браузере (возможно, это какой-то счетчик на стороне клиента - или, возможно, он используется для облегчения кэширования запросов сервером).
После того, как вы проанализировали ответ в структуре, я думаю, что вы хотите, чтобы ставки присутствовали в:
JSONresponse["data"]["rate_data"]["bidRates"][0]
Если ваша версия Excel содержит Power Query, вы можете вместо этого использовать еезапросить ставку.Преимущества будут в том, что он может обрабатывать JSON (изначально) и может возвращать таблицу Excel.Недостатком является то, что Power Query имеет собственный язык программирования M
, но эквивалент в M
будет выглядеть примерно так:
let
url = "https://www.oanda.com/currency/converter/update",
requestParameters = [base_currency_0 = "GBP", quote_currency = "AUD", end_date = "2019-04-06", view = "details", id = "1", action = "C"],
requestHeaders = [
Accept = "text/javascript, text/html, application/xml, text/xml, */*",
Referer = "https://www.oanda.com/currency/converter/",
#"User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
#"X-Prototype-Version" = "1.7",
#"X-Requested-With" = "XMLHttpRequest"
],
request = Web.Contents(url, [Query = requestParameters, Headers = requestHeaders]),
json = Json.Document(request),
rate = json[data][rate_data][bidRates]{0}
in
rate
, который вы реализуете (в зависимости от версии Excel) с помощью: Excel > Data > Get Data > From Other Sources > Blank Query > Advanced Editor (top left) > replace any code with code above > Close & Load (top left) > Load to new sheet
.(Это было бы более полезно, если бы вы загружали на лист более одного значения.)