gpt4 book ai didi

excel - GET 请求数据不更新

转载 作者:行者123 更新时间:2023-12-04 20:09:49 27 4
gpt4 key购买 nike

我正在尝试从 API 检索数据,但即使我在 GET 请求之前将其设置为空,我的变量也不会更新。

只有当我关闭 Excel 并重新打开它时,变量的数据才会更新。

有什么解释吗?我已经挠头这么久了。

这是代码

Sub getJsonResult()
Dim objRequestt As Object
Dim strUrl As String
Dim blnAsync As Boolean
Dim strUrlXBTUSD As String
Dim strResponse As String
Dim jsonText As String
Dim jsonObject As Object, item As Object
Dim i As Integer

'setting up the variable to 0 or nothing

strUrlXBTUSD = ""
strResponsee = ""
jsonText = ""
i = 0
blnAsync = False
Set item = Nothing
Set jsonObject = Nothing
Set objRequestt = Nothing
Set objRequestt = CreateObject("MSXML2.XMLHTTP")
strUrlXBTUSD = "https://www.bitmex.com/api/v1/orderBook/L2?symbol=XBTUSD&depth=3"
blnAsync = True


'Starting the GET request

ThisWorkbook.Activate
With objRequestt
.Open "GET", strUrlXBTUSD, blnAsync
.SetRequestHeader "Content-Type", "application/json"
.send
strResponse = .responseText 'here the response is always the same except if i Close Excel
Debug.Print strResponsee
End With
End Sub

最后,即使经过几次 F5 刷新,“strResponse”也始终相同。我可以看到数据在网络浏览器上不再准确。我希望 VBA 程序在不关闭 Excel 的情况下获取准确的数据并刷新。

怎么做?

最佳答案

您可以添加一条指令以避免提供缓存结果(服务器可以忽略这一点,但我过去在这方面取得了很好的成功)。确保您的 async 参数始终为 False,并在测试之间留出更多时间。我注意到有时价格变化缓慢,因此您可能会由于间隔太小/尝试次数不足而错过变化。您会注意到 size虽然改变。您应该添加 max timeout到底部脚本中的循环。

还删除了匈牙利符号。

Option Explicit

Public Sub getJsonResult()
Dim http As Object
Dim urlXBTUSD As String
Dim response As String
Dim j As Long
Const ASYNC_ARG As Boolean = False

Set http = CreateObject("MSXML2.XMLHTTP")
For j = 1 To 10
response = vbNullString
urlXBTUSD = "https://www.bitmex.com/api/v1/orderBook/L2?symbol=XBTUSD&depth=3"

With http
.Open "GET", urlXBTUSD, ASYNC_ARG
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
response = .responseText
Debug.Print response
End With
Application.Wait Now + TimeSerial(0, 0, 15)
Next
End Sub

这是一个漫长而乏味的证明方法,通过循环直到退货集合中第一个项目的价格发生变化。我用 jsonconverter.bas添加到项目和 VBE > 工具 > 引用 > Microsoft 脚本运行时引用。
Option Explicit

Public Sub getJsonResult()
Dim http As Object
Dim urlXBTUSD As String
Dim response As String
Dim j As Long
Const ASYNC_ARG As Boolean = False
Dim price As String, firstValue As String

Set http = CreateObject("MSXML2.XMLHTTP")
urlXBTUSD = "https://www.bitmex.com/api/v1/orderBook/L2?symbol=XBTUSD&depth=3"

With http
.Open "GET", urlXBTUSD, ASYNC_ARG
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
firstValue = JsonConverter.ParseJson(.responseText)(1)("price")
Debug.Print firstValue
Do
.Open "GET", urlXBTUSD, blnAsync
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
price = JsonConverter.ParseJson(.responseText)(1)("price")
Application.Wait Now + TimeSerial(0, 0, 5)
Loop While price = firstValue
Debug.Print price
End With
End Sub

关于excel - GET 请求数据不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55200823/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com