excel vba http请求从雅虎财经下载数据

标签 excel vba yahoo yql

我正在使我使用 Excel VBA 编写的程序更快。

该程序从 asx 下载股票市场数据。

我想从 2 个 url 获取数据:

我的代码

url2 = "http://ichart.finance.yahoo.com/table.txt?s=bhp.ax"

Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")

XMLHTTP.Open "GET", url2, False

XMLHTTP.send

result = XMLHTTP.responseText

ActiveCell.Value = result

Set XMLHTTP = Nothing

URL 1. http://ichart.finance.yahoo.com/table.txt?s=bhp.ax

我的问题。

这个文件非常大。我想我可以简单地存储这些 http 请求的结果并将其打印到调试窗口或直接打印到单元格。然而这些方法似乎切断了部分数据?

如果我在notepad++中从url 2下载txt文件,它有将近200 000个字符 但它的数量在 3 -5 000 之间。处理这些请求的最佳方法是什么,以便捕获所有数据并且我可以稍后解析它们?

URL 2. 从第一个 URL 开始,我只需要 YQL 查询产生的 JSON 数据。

我的问题

当您点击下面的链接时,我不确定如何仅获取 json 数据,或者如何存储它,以便不会出现 URL 1 遇到的问题(丢失数据)。

http://developer.yahoo.com/yql/console/?q=select%20symbol%2C%20ChangeRealtime%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22YHOO%22%2C%22AAPL%22%2C%22GOOG%22%2C%22MSFT%22%29%20|%20sort%28field%3D%22ChangeRealtime%22%2C%20descending%3D%22true%22%29%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env#h=select%20 *%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22bhp.ax%22%29

非常感谢,乔什。

最佳答案

尝试修改后的代码

Sub GetYahooFinanceTable()
    Dim sURL As String, sResult As String
    Dim oResult As Variant, oData As Variant, R As Long, C As Long

    sURL = "http://ichart.finance.yahoo.com/table.txt?s=bhp.ax"
    Debug.Print "URL: " & sURL
    sResult = GetHTTPResult(sURL)
    oResult = Split(sResult, vbLf)
    Debug.Print "Lines of result: " & UBound(oResult)
    For R = 0 To UBound(oResult)
        oData = Split(oResult(R), ",")
        For C = 0 To UBound(oData)
            ActiveSheet.Cells(R + 1, C + 1) = oData(C)
        Next
    Next
    Set oResult = Nothing
End Sub

Function GetHTTPResult(sURL As String) As String
    Dim XMLHTTP As Variant, sResult As String

    Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    XMLHTTP.Open "GET", sURL, False
    XMLHTTP.Send
    Debug.Print "Status: " & XMLHTTP.Status & " - " & XMLHTTP.StatusText
    sResult = XMLHTTP.ResponseText
    Debug.Print "Length of response: " & Len(sResult)
    Set XMLHTTP = Nothing
    GetHTTPResult = sResult
End Function

这会将数据分成行,因此单元格中不会达到最大文本长度。此外,这还用逗号将数据进一步分割到相应的列中。

enter image description here

关于excel vba http请求从雅虎财经下载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18163560/

相关文章:

vba - Excel VBA - 对象引用未设置为对象的实例

excel - 如何判断 Windows 10 上是否禁用了 VBA ActiveX?

vba - 使用邮件合并从 Excel 文件生成 Word 文档

vba - 如何在每个循环中获取单元格的行号

vba - excel vba : find the row of a cell with a certain value and put that row number in another cell

excel - "Cannot parse object reference from", 拉力赛

vba - Excel VBA 代码 - 有限制的组合

php - 雅虎老板 - 链接 - 困惑!

android - 使用 java 邮件 API 或任何其他语言发送批量邮件,而无需在服务器上存储用户密码

java - 通过 Play 框架将 yahoo 联系人导入到我的页面时需要帮助