看來yahoo股市,網頁格式都統一了
這是幾個月前寫的,順手po上來
yahoo 主力進出
Sub Get_Yahoo_brokerTrades_Json()
Dim URL As String, GetXml As Object, Jsondata As Object, DecodeJson, temp As String, Stock As String, buyerRankList, sellerRankList, DataTime As String
'Stock = "2412" 'test
'Stock = "2002" 'test
Stock = "2330" 'test
ttt = Timer
URL = "https://tw.stock.yahoo.com/quote/" & Stock & "/broker-trading"
Set GetXml = CreateObject("WinHttp.WinHttpRequest.5.1")
Set Jsondata = CreateObject("HtmlFile")
With GetXml
.Open "GET", URL, False
.setRequestHeader "Cache-Control", "no-cache"
.setRequestHeader "Pragma", "no-cache"
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
temp = "{""brokerTrades"":{""data"":{""buyerRankList"":[" & Split(Split(.responsetext, """brokerTrades"":{""data"":{""buyerRankList"":[")(1), ",""totalDifferenceVolK"":")(0) & "}}}"
DataTime = Split(Split(.responsetext, "datatime=""")(1), """>")(0)
Set DecodeJson = CallByName(CallByName(Jsondata.JsonParse(temp), "brokerTrades", VbGet), "data", VbGet)
Set buyerRankList = CallByName(DecodeJson, "buyerRankList", VbGet)
Set sellerRankList = CallByName(DecodeJson, "sellerRankList", VbGet)
With Sheets("工作表1")
.Cells.Clear
.Range("a1:h1") = Array("買超券商", "買進", "賣出", "買超張數", "賣超券商", "買進", "賣出", "賣超張數")
For i = 0 To CallByName(buyerRankList, "length", VbGet) - 1
.Cells(i + 2, 1) = CallByName(CallByName(buyerRankList, i, VbGet), "name", VbGet)
.Cells(i + 2, 2) = CallByName(CallByName(buyerRankList, i, VbGet), "buyVolK", VbGet)
.Cells(i + 2, 3) = CallByName(CallByName(buyerRankList, i, VbGet), "sellVolK", VbGet)
.Cells(i + 2, 4) = CallByName(CallByName(buyerRankList, i, VbGet), "volume", VbGet)
.Cells(i + 2, 5) = CallByName(CallByName(sellerRankList, i, VbGet), "name", VbGet)
.Cells(i + 2, 6) = CallByName(CallByName(sellerRankList, i, VbGet), "buyVolK", VbGet)
.Cells(i + 2, 7) = CallByName(CallByName(sellerRankList, i, VbGet), "sellVolK", VbGet)
.Cells(i + 2, 8) = CallByName(CallByName(sellerRankList, i, VbGet), "volume", VbGet)
Next i
.Cells.Columns.AutoFit
End With
Application.ScreenUpdating = True
End With
MsgBox Stock & vbNewLine & DataTime & vbNewLine & Timer - ttt & "s", vbOKOnly, "report" 'debug
Set GetXml = Nothing
Set Jsondata = Nothing
Set DecodeJson = Nothing
Set buyerRankList = Nothing
Set sellerRankList = Nothing
End Sub