(不定期更新)使用VBA解決 excel web 查詢無法匯入、匯入太慢的股市資料

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檔)
[點擊下載]
peter624
請問snare哥!有關 三、下載json,可以,方法同1106樓範例其中的圖片的json資料網址是如何得到的。
htnvt241
請問 smare大大:上市的月營收可以抓到, 但是如果是 key in 上櫃股票代號, 會得到以下錯誤警示訊息, 請問要如何解? 謝謝 ! 【執行階段錯誤 '438':物件不支援此屬性或方法】
g80860 wrote:
https://mis.taifex.com.tw/futures/VolatilityQuotes/


幾秒跑一次,往下記錄……等等,請自行找相關範例改寫







Sub Get_taifex_Json()

Dim URL As String, GetXml As Object, Jsondata As Object, DecodeJson
Set GetXml = CreateObject("msxml2.xmlhttp")
Set Jsondata = CreateObject("HtmlFile")






URL = "https://mis.taifex.com.tw/futures/api/getChartDataTick"


With GetXml

.Open "POST", URL, False
.setRequestHeader "Cache-Control", "no-cache"
.setRequestHeader "Pragma", "no-cache"
.setRequestHeader "Content-type", "application/json"
.setRequestHeader "Accept", "application/json"
.setRequestHeader "Referer", "https://mis.taifex.com.tw/futures/VolatilityQuotes/"
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"

.send ("{""SymbolID"":""TAIWANVIX""}")

'debug
Debug.Print .responsetext

Set DecodeJson = CallByName(Jsondata.JsonParse(.responsetext), "RtData", VbGet)

'debug
MsgBox CallByName(DecodeJson, "DispCName", VbGet) & vbNewLine & _
CallByName(CallByName(DecodeJson, "Quote", VbGet), "CLastPrice", VbGet) & vbNewLine & _
CallByName(CallByName(DecodeJson, "Quote", VbGet), "COpenPrice", VbGet) & vbNewLine & _
CallByName(CallByName(DecodeJson, "Quote", VbGet), "CHighPrice", VbGet) & vbNewLine & _
CallByName(CallByName(DecodeJson, "Quote", VbGet), "CLowPrice", VbGet) & vbNewLine & _
CallByName(CallByName(DecodeJson, "Quote", VbGet), "CRefPrice", VbGet) & vbNewLine & _
CallByName(CallByName(DecodeJson, "Quote", VbGet), "CDate", VbGet), vbOKOnly, "debug"

End With


Set GetXml = Nothing
Set Jsondata = Nothing
Set DecodeJson = Nothing

End Sub





g80860
感謝版主大大。
snare wrote:
一、yahoo營收圖...(恕刪)


Thank you very much.太強了
snare哥
snare您好:
拜讀您文章許久,敝人有個網站資料是JSON的格式,參考您所有JSON的範例後,還是百思不得其解。
網址如下:https://www.barrons.com/market-data/api/proxy?https://quote-barrons.millstone.mktw.dowjones.io/api/quote/financials?chartingSymbol=stock///ko&urlFragment=cash-flow/annual

上圖 為該網JSON的結構,敝人想要匯入索引7內的資料,我試了許多範例,都不能進入第二層。
以下是敝人寫的程式內容
Sub barrons()
Dim XmlHttp As Object, json As Object
Dim i As Integer, j As Integer, k As Integer
Dim url0 As String

url0 = "https://www.barrons.com/market-data/api/proxy?https://quote-barrons.millstone.mktw.dowjones.io/api/quote/financials?chartingSymbol=stock///ko&urlFragment=cash-flow/annual"

Set XmlHttp = CreateObject("Msxml2.XMLHTTP") '後期邦定
k = 2
With XmlHttp
.Open "Get", url0, False
.send

If .Status = 200 Then
Set json = CallByName(jsonDecode(.responseText), "blocks", VbGet)
For j = 0 To CallByName(json, "length", VbGet) - 1
With Sheets(2)
.Cells(k, 1) = CallByName(CallByName(json, j, VbGet), "$type", VbGet)
End With
k = k + 1
Next
End If
End With
End Sub
Function jsonDecode(JsonString As Variant)
Set sc = CreateObject("ScriptControl")
sc.Language = "JScript"
Set jsonDecode = sc.Eval("(" + JsonString + ")")
End Function
以上是可以匯入第一層內的資料,但想要進入第二層 7,就是不知要如何寫呢?
最終是想要匯入7內"sections"中0、1、2的資料。
再加問一個問題,JSON要如何找字串,而不是只找索引呢?還有什麼是索引?
以敝人這個例子"blocks"是索引嗎?還是是字串?
再追加問另一個問題,如果利用VBA-JSON JsonConverter 是否可以匯入第二層以下,甚至第三層以下的資料呢?如果是第一層的資料,是可以匯入,但以上網站敝人就不知要如何寫了,不知您是否有所研究。
以上不知snare是否可以指點迷津一下,感謝您撥空回應。
snare哥你好!

不好意思,又來請教問題了,因為在下載https://www.tpex.org.tw/web/stock/statistics/monthly/monthly_rpt_mkt_info_05.php的excel檔案,
突然抓不到https://www.tpex.org.tw/web/stock/statistics/monthly/monthly_rpt_mkt_info_dl.php?DOC_ID=2360,2360這個ID,之前是ok的,
不曉得為什麼,json資料也有抓到(https://www.tpex.org.tw/web/stock/statistics/monthly/monthly_rpt_mkt_info_result.php?l=zh-tw&t=5&sd=99/02&ed=110/10&_=),程式碼如下,
其中 temp=110/11,[object Object]變數抓不到後面的id值,再請snare哥解惑,謝謝。

'取得下載網址範例
Sub Get_tpex()

Dim Xmlhttp As Object, Jsondata As Object, DecodeJson, temp
Dim Url As String, Url_a As String, Url_b As String, sd As String, ed As String, i As Integer
Dim tempAddress1()
Dim Year As String
Dim Month As String
Dim canDownload As Boolean
Dim DateArr() As String

Set Jsondata = CreateObject("HtmlFile")
Jsondata.Write ""

Application.ScreenUpdating = False

canDownload = False
''Sheets("工作表1").Cells.Clear
ReDim tempAddress1(1000, 1)


Year = "2021"
Month = "11"

If Month < 10 Then Month = "0" & Month


sd = "99/02"
ed = Year - 1911 & "/" & Month


Target = "E:\每月最高最低股價\" & YearDir & "\" '暫存目錄


Url = "https://www.tpex.org.tw/web/stock/statistics/monthly/monthly_rpt_mkt_info_result.php?l=zh-tw&t=5&sd=" & sd & "&ed=" & ed & "&_="
Url_a = "https://www.tpex.org.tw/web/stock/statistics/monthly/monthly_rpt_mkt_info_05.php?l=zh-tw"
Url_b = "https://www.tpex.org.tw/web/stock/statistics/monthly/monthly_rpt_mkt_info_dl.php?DOC_ID="

Set Xmlhttp = CreateObject("Msxml2.XMLHTTP")

With Xmlhttp

.Open "GET", Url & UNIXTime, False
.setRequestHeader "Referer", Url_a
.send
''abc = Xmlhttp.responsetext
Set DecodeJson = Jsondata.JsonParse(.responsetext)
Set temp = CallByName(DecodeJson, "aaData", VbGet)

For i = 0 To CallByName(temp, "length", VbGet) - 1
tempAddress1(i, 0) = CallByName(CallByName(temp, i, VbGet), "0", VbGet)
tempAddress1(i, 1) = Url_b & CallByName(CallByName(temp, i, VbGet), "1", VbGet)
DateArr = Split(tempAddress1(i, 0), "/")

If DateArr(0) = Year - 1911 And DateArr(1) = Month Then
Url = tempAddress1(i, 1)

''URLDownloadToFile 0, Url, Target & YearDir & monthDir & "_C02005.zip", 0, 0
canDownload = True
Exit For
End If

''Cells(i + 1, 1) = CallByName(CallByName(temp, i, VbGet), "0", VbGet)
''Cells(i + 1, 2) = Url_b & CallByName(CallByName(temp, i, VbGet), "1", VbGet)
Next i

End With


If canDownload = True Then



Call 下載上櫃每月最高最低股價CSV(Url, DateArr(0), DateArr(1))

End If


Set Xmlhttp = Nothing
Set DecodeJson = Nothing
Set Jsondata = Nothing
Set temp = Nothing

End Sub
snare大神

goodinfo又出了道難題 研究了一下還是無法解決
要取得這個網址的資料
https://goodinfo.tw/StockInfo/StockList.asp?RPT_TIME=&MARKET_CAT=熱門排行&INDUSTRY_CAT=投信累計買超金額 – 當日@@投信累計買超@@投信買超金額 – 當日

現在用之前的方法如下 已經無法取得資料
不知您是否還有其他的方法可解決這個問題

謝謝

Url = "https://goodinfo.tw/StockInfo/StockList.asp?RPT_TIME=&MARKET_CAT=熱門排行&INDUSTRY_CAT=投信累計買超金額 – 2日@@投信累計買超@@投信買超金額 – 2日"
Url_a = "https://goodinfo.tw/StockInfo/StockList.asp?RPT_TIME=&MARKET_CAT=熱門排行&INDUSTRY_CAT=投信累計買超金額 – 當日@@投信累計買超@@投信買超金額 – 當日"
Call get_goodinfo(Url, Url_a)


Sub get_goodinfo(Url As String, Url_a As String)

Dim Xmlhttp As Object, HTMLsourcecode As Object, Table, i As Integer, p As Integer, ttt As Double

On Error Resume Next

Set HTMLsourcecode = CreateObject("htmlfile")
Set Xmlhttp = CreateObject("WinHttp.WinHttpRequest.5.1")

Application.ScreenUpdating = False

ThisWorkbook.Sheets("temp").Cells.Clear

With Xmlhttp
.Open "POST", Url, False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
.send
HTMLsourcecode.body.innerhtml = convertraw(.ResponseBody)

If InStr(HTMLsourcecode.body.innerhtml, "瀏覽量異常") > 0 Then
MsgBox HTMLsourcecode.body.innertext
Exit Sub
End If

.Open "POST", Url_a, False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "Referer", Url
.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
.send
HTMLsourcecode.body.innerhtml = convertraw(.ResponseBody)

If InStr(HTMLsourcecode.body.innerhtml, "瀏覽量異常") > 0 Then
MsgBox HTMLsourcecode.body.innertext
Exit Sub
End If

Set Table = HTMLsourcecode.getElementById("tblStockList").Rows
Call Cell_by_Cell("temp", Table)


Sheets("temp").Cells(1, 1).Select
Sheets("temp").Cells.EntireColumn.AutoFit


End With

Application.ScreenUpdating = True

Set HTMLsourcecode = Nothing
Set Xmlhttp = Nothing
Set Table = Nothing

End Sub
alfidpan wrote:
還有什麼是索引?以敝人這個例子"blocks"是索引嗎?還是是字串?
(恕刪)


字串格式的索引,有點像是書本、目錄、頁…,查字典那樣的概念





(以您的程式碼說明)
整本書、封面
jsonDecode(.responseText)

打開書,找其中一個名稱叫blocks的目錄
Set json = CallByName(jsonDecode(.responseText), "blocks", VbGet)

目錄裡面的各章、節、項…等等
For j = 0 To CallByName(json, "length", VbGet) - 1

只看各章、節、項…中名稱為$type的內容
.Cells(k, 1) = CallByName(CallByName(json, j, VbGet), "$type", VbGet)

alfidpan wrote:
再加問一個問題,JSON要如何找字串,而不是只找索引呢
(恕刪)


同上個問題
轉成 Variant/Object/JScriptTypeInfo 這種特殊格式,就沒辦法跳過索引只找內容
您就想成是書本,因為想找的字串、內容,位置是固定的


真要找字串,建議純文字的時候處理,比較簡單,例如用instr()找出文字出現在那個位置


或是使用更長的程式碼,把整個Variant/Object/JScriptTypeInfo
轉成字典物件CreateObject("Scripting.Dictionary")


alfidpan wrote:

再追加問另一個問題,如果利用VBA-JSON JsonConverter 是否可以匯入第二層以下,甚至第三層以下的資料呢?
(恕刪)


通常不太需要管有多少層,因為要的資料,位置都是固定的,不同的只有長度
而長度可用CallByName(…, "length", VbGet)取得,多拆幾次就好,程式碼也比較簡單

如果您要全拆出來,可參考1123樓 nickchu
提供的CreateObject("ScriptControl")範例
前提是您excel不會升級到64位元,只用32位元版本
雖然ScriptControl 可以用mshta繞過無法在excel x64使用的限制
可惜有點複雜,寫法上有些細節要注意,在此不多做說明



alfidpan wrote:
以上是可以匯入第一層內的資料,但想要進入第二層 7,就是不知要如何寫呢?
最終是想要匯入7內"sections"中0、1、2的資料。
(恕刪)


多定義幾個物件,一層一層拆出來,簡易程式碼請參考
(為了方便說明,分比較多個json物件)







Sub Get_barrons_Json()

Dim URL As String, GetXml As Object, Jsondata As Object, DecodeJson
Set GetXml = CreateObject("msxml2.xmlhttp")
Set Jsondata = CreateObject("HtmlFile")






URL = "https://www.barrons.com/market-data/api/proxy?https://quote-barrons.millstone.mktw.dowjones.io/api/quote/financials?chartingSymbol=stock///ko&urlFragment=cash-flow/annual"


With GetXml

.Open "GET", URL, False
.send

'第0層

'第1層
Set DecodeJson = CallByName(Jsondata.JsonParse(.responsetext), "blocks", VbGet)

Dim json, json1, json2, json3, i As Integer, j As Integer, k As Integer
On Error Resume Next

'第2層(0~6跳過,請自行補上)
Set json = CallByName(CallByName(DecodeJson, "7", VbGet), "sections", VbGet)

For i = 0 To CallByName(json, "length", VbGet) - 1

'第3層
Set json1 = CallByName(CallByName(json, i, VbGet), "items", VbGet)

For j = 0 To CallByName(json1, "length", VbGet) - 1

'第4層
Set json2 = CallByName(json1, j, VbGet)
Debug.Print CallByName(json2, "displayName", VbGet)

'第5層
Set json3 = CallByName(json2, "values", VbGet)


For k = 0 To CallByName(json3, "length", VbGet) - 1

'第6層
Debug.Print CallByName(CallByName(json3, k, VbGet), "formatted", VbGet), CallByName(CallByName(json3, k, VbGet), "value", VbGet)
Next k

Debug.Print vbNewLine

Next j
Next i

End With


Set GetXml = Nothing
Set Jsondata = Nothing
Set DecodeJson = Nothing
Set json = Nothing
Set json1 = Nothing
Set json2 = Nothing
Set json3 = Nothing

End Sub

alfidpan
snare您好: 非常非常感謝您的大力幫忙,您這巨集有效且好用,真的非常感謝您,感恩。[讚][讚][讚]
peter624 wrote:
其中 temp=110/11,[object Object]變數抓不到後面的id值


因為您程式碼不完整,猜測是url_b+id,urldownloadtofile 另存新檔的問題




'……其它程式碼,請自行補上

Dim DOC_ID As String, fileName As String
For i = 0 To CallByName(temp, "length", VbGet) - 1

DoEvents

DOC_ID = CallByName(CallByName(CallByName(temp, i, VbGet), "1", VbGet), "id", VbGet)
fileName = CallByName(CallByName(CallByName(temp, i, VbGet), "1", VbGet), "fileName", VbGet)

URLDownloadToFile 0, Url_b & DOC_ID, Target & fileName, 0, 0

Next i


peter624
謝謝snare哥 已解決!!
rainbowsperm wrote:
https://goodinfo.tw/StockInfo/StockList.asp?RPT_TIME=&MARKET_CAT=熱門排行&INDUSTRY_CAT=投信累計買超金額 – 當日@@投信累計買超@@投信買超金額 – 當日

現在用之前的方法如下 已經無法取得資料






Sub get_goodinfo_test()

Dim Xmlhttp As Object, HTMLsourcecode As Object, Table
Set HTMLsourcecode = CreateObject("htmlfile")
Set Xmlhttp = CreateObject("msxml2.xmlhttp")

Application.ScreenUpdating = False

Cells.Clear

Url = "https://goodinfo.tw/StockInfo/StockList.asp?RPT_TIME=&MARKET_CAT=%E7%86%B1%E9%96%80%E6%8E%92%E8%A1%8C&INDUSTRY_CAT=%E6%8A%95%E4%BF%A1%E7%B4%AF%E8%A8%88%E8%B2%B7%E8%B6%85%E9%87%91%E9%A1%8D%20%E2%80%93%20%E7%95%B6%E6%97%A5@@%E6%8A%95%E4%BF%A1%E7%B4%AF%E8%A8%88%E8%B2%B7%E8%B6%85@@%E6%8A%95%E4%BF%A1%E8%B2%B7%E8%B6%85%E9%87%91%E9%A1%8D%20%E2%80%93%20%E7%95%B6%E6%97%A5"

With Xmlhttp
.Open "GET", Url, False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
.send
HTMLsourcecode.body.innerhtml = .responsetext

If InStr(HTMLsourcecode.body.innerhtml, "瀏覽量異常") > 0 Then
MsgBox HTMLsourcecode.body.innertext
Exit Sub
End If


'Set Table = HTMLsourcecode.getElementById("divStockList") 'txtStockListData
'Call Clipboard_Past("temp", Table)


Set Table = HTMLsourcecode.getElementById("tblStockList").Rows
Call Cell_by_Cell("temp", Table)


Sheets("temp").Cells(1, 1).Select
Sheets("temp").Cells.EntireColumn.AutoFit


End With

Application.ScreenUpdating = True

Set HTMLsourcecode = Nothing
Set Xmlhttp = Nothing
Set Table = Nothing

End Sub



Sub Cell_by_Cell(sheet_name As String, Table)

Dim i As Integer, j As Integer, lastrow As Integer

lastrow = Sheets(sheet_name).Range("A1").CurrentRegion.Rows.Count

For i = 0 To Table.Length - 1
For j = 0 To Table(i).Cells.Length - 1
Sheets(sheet_name).Cells(i + 1 + IIf(lastrow > 1, lastrow, 0), j + 1) = IIf(j = 1, "'", "") & Table(i).Cells(j).innertext
Next j
Next i


End Sub



Sub Clipboard_Past(sheet_name As String, Table)

Dim Clipboard As Object, lastrow As Integer
Set Clipboard = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

Clipboard.settext Table.innerhtml
Clipboard.putinclipboard

lastrow = Sheets(sheet_name).Range("A1").CurrentRegion.Rows.Count
Sheets(sheet_name).Cells(lastrow + IIf(lastrow > 1, 1, 0), 1).Select
Sheets(sheet_name).PasteSpecial NoHTMLFormatting:=True

Set Clipboard = Nothing

End Sub


snare wrote:
2021-11-29 23:38


請問snare哥!

有關妳說明的 三、下載json,可以,方法同1106樓範例,
其中json網址部分(圖片顯示'月'、'季'、'年')是如何取得的,這是困惑的地方,
再麻煩你了,謝謝。
關閉廣告
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 144)

今日熱門文章 網友點擊推薦!