XMLHTTP缓存:Xml在第一次请求Excel VBA后引入相同的数据

时间:2015-07-27 19:06:22

标签: xml excel vba excel-vba caching

我正在使用XMLHTTP阅读XML Feed。我注意到,当我打开Excel文件时第一次看起来很好,但是当XML发生变化并且我再次运行宏时,它会带来相同的先前数据。我做了一些关于如何停止缓存的研究。我读到添加一个随机数作为额外的参数将修复它但不适合我。

有什么想法吗?

Sub MLB_PinnyParser()

Dim Req As New XMLHTTP
Dim Resp As New DOMDocument
Req.Open "GET", "http://xml.pinnaclesports.com/pinnaclefeed.aspx?sporttype=Baseball&sportsubtype=MLB", False
Req.send
Resp.LoadXML Req.responseText

 For Each Event In Resp.getElementsByTagName("event")

'More code here

 Next Event

Set Req = Nothing
Set Resp = Nothing

End Sub

3 个答案:

答案 0 :(得分:4)

您通常可以通过修改每个请求的URL来解决此问题。只需添加一个随机数作为查询字符串参数。例如:

' Seed the RNG somewhere at the start of your app...
Randomize

...

Sub MLB_PinnyParser()

    ' Generate a random, six-digit number...
    Dim intRand As Long
    intRand = Int((900000) * Rnd) + 100000

    ' Add the number as a param to the request...
    Dim strUrl As String
    strUrl = "http://xml.pinnaclesports.com/pinnaclefeed.aspx?sporttype=Baseball&sportsubtype=MLB" & "&blah=" & intRand

    Dim Req As New XMLHTTP
    Req.Open "GET", strUrl, False
    ...

End Sub

由于听起来您已经尝试过此操作,请尝试在您的请求中添加一些与缓存相关的标头,以查看是否会产生影响:

Req.SetRequestHeader "Cache-Co­ntrol", "no-cache,max-age=0"
Req.SetRequestHeader "pragma", "no-cache"

答案 1 :(得分:0)

这不是XMLHTTP,Excel或VBA问题。您尝试访问的订阅源仅在特定时间间隔内更新,并且在请求中添加随机数对此特定情况无效。

如果您查阅Pinnacle Sports XML Feed here的序言(生成页面需要几秒钟),您将看到您正在进行的调用返回的XML文件仅在每次更新时更新10分钟。正确的用法是在第一次调用时下载该文件,使用从第一次调用返回的时间戳请求增量更新作为第二次调用的参数,然后通过相应地增加时间戳并通过每60秒请求进一步更新(最多)作为参数。

或者,您可以查看使用their API而不是XML Feed

答案 2 :(得分:0)

喜欢这个post

将“ Microsoft.XMLHTTP”更改为“ Msxml2.ServerXMLHTTP”

对我有用。