peter624 wrote:
(1)在308樓將k線圖(走勢圖),製作一個整合的網頁,大概知道如何撰寫,
但是要將其他的圖也併入,如https://tw.stock.yahoo.com/quote/2379/revenue
年季月的營收圖也整合成一個網頁,卻找不到對應的js檔。
(2)使用clipboard的方式下載https://tw.stock.yahoo.com/quote/2379/revenue,如何設定參數"月季年",
抓取不同的table,有參考你寫的Get_Yahoo_dividend_clipboard,只是不會抓各別的"月季年"營收。
(2)https://tw.stock.yahoo.com/quote/2379/revenue可以使用jason的方式下載嗎?可以的話不曉得如何撰寫。
一、yahoo營收圖沒提供舊版格式,那個圖無法獨立出來
非框架格式的都無法整合,只能用vba下載後,再自己畫
例如:308樓範例
(這裡是 使用firefox 瀏覽器示範,chrome要看原始碼比較不方便)
新版走勢圖,在圖形上按滑鼠右鍵,沒出現……頁框……
切換成舊版後,在圖形上按滑鼠右鍵,有出現…頁框…
選在新分頁開啟頁框或只顯示本頁框
之後那個網址就可以獨立出來使用
然後做個簡易的html檔,用iframe 把網址包起來
所以308樓的範例,也可以簡化到只用 sub main() 一個副程式
做出來的html檔內容如下,資料不多,甚至用筆記本打打就好,還用不上vba
(點我看大圖,因語法關係,使用圖片代替)
其它網站,用一樣的方法即可(如果沒保護的話)
例如:moneydj基金淨值走勢圖
https://www.moneydj.com/funddj/ya/yp010000.djhtm?a=ACPS02
https://www.moneydj.com/funddj/ya/yp010000.djhtm?a=AC0014
https://www.moneydj.com/funddj/ya/yp010000.djhtm?a=ACPS60
(點我看大圖,因語法關係,使用圖片代替)
二、打開網頁首先顯示“月”,季、年,要點選才會產生資料,所以clipboard複製不到資料
三、下載json,可以,方法同1106樓範例
'這裡是用“年營收”,當下載範例
'月、季,網址、排版、callbyname,請自行做適當的修改
'prid參數,因網頁原始碼中有標示test,測試後發現不用也行
'年營收
'季
'月
Sub Get_Yahoo_revenue_Json()
Dim URL As String, Url_a As String, GetXml As Object, Jsondata As Object, DecodeJson, Stock As String, prid As String
'Stock = "2412" 'test
'Stock = "2002" 'test
'Stock = "2330" 'test
Stock = "2379" 'test
ttt = Timer
Set GetXml = CreateObject("WinHttp.WinHttpRequest.5.1")
Set Jsondata = CreateObject("HtmlFile")
URL = "https://tw.stock.yahoo.com/quote/" & Stock & "/revenue"
With GetXml
'===================================================================
'prid參數,暫時用不到
'.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
'prid = "prid=" & Left(Split(.responsetext, """prid"":""")(1), 13)
'===================================================================
(點我看大圖,因語法關係,使用圖片代替,或到文未下載網址txt檔)
.Open "GET", Url_a, False
.setRequestHeader "Cache-Control", "no-cache"
.setRequestHeader "Pragma", "no-cache"
.setRequestHeader "Referer", URL
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
Set DecodeJson = CallByName(CallByName(CallByName(CallByName(Jsondata.JsonParse(.responsetext), "data", VbGet), "data", VbGet), "result", VbGet), "revenues", VbGet)
With Sheets("工作表1")
.Cells.Clear
'如果下載月、季,以下程式碼需做適當的修改
.Range("a1:d1") = Array("年度", "當年營收", "去年營收", "年增率%")
For i = 0 To CallByName(DecodeJson, "length", VbGet) - 1
.Cells(i + 2, 1) = CallByName(CallByName(DecodeJson, i, VbGet), "date", VbGet)
.Cells(i + 2, 2) = "'" & CallByName(CallByName(DecodeJson, i, VbGet), "revenue", VbGet)
.Cells(i + 2, 3) = "'" & CallByName(CallByName(CallByName(DecodeJson, i, VbGet), "lastYear", VbGet), "revenue", VbGet)
.Cells(i + 2, 4) = CallByName(CallByName(DecodeJson, i, VbGet), "revenueYoY", VbGet) & "%"
Next i
.Cells.Columns.AutoFit
End With
Application.ScreenUpdating = True
End With
MsgBox Stock & vbNewLine & Timer - ttt & "s", vbOKOnly, "report" 'debug
Set GetXml = Nothing
Set Jsondata = Nothing
Set DecodeJson = Nothing
End Sub
(網址txt檔)
[點擊下載]