shunyulu 發表於 19-6-25 02:39

證券交易所下載改為https

證券交易所下載改為https, 例如
https://www.twse.com.tw/exchangeReport/MI_5MINS_INDEX?response=csv&date=20190624
原來有使用http下載的要改一下.
我是用vb Webclient每天下載加權5秒tick
lBytes = wb.DownloadData("http://www.twse.com.tw/exchangeReport/MI_5MINS_INDEX?response=csv&date=20190624")

現在比較麻煩
要多加強制跳過憑證驗證

Public Function ValidateServerCertificate(sender As Object, certification As System.Security.Cryptography.X509Certificates.X509Certificate, _
                                              chain As System.Security.Cryptography.X509Certificates.X509Chain, sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean
      Return True
End Function

在下載前要加
ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateServerCertificate)
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

lBytes = wc.DownloadData("https://www.twse.com.tw/exchangeReport/MI_5MINS_INDEX?response=csv&date=20190624")
這樣就可以正常下載

shunyulu 發表於 19-6-25 02:41

要Imports這兩項
Imports System.Net.Security
Imports System.Security.Cryptography.X509Certificates

ram 發表於 19-7-5 16:49

這個的話有在網路上找到小程式可以用{:4_90:}

感覺還蠻方便的,直接執行程式有參數說明


依說明看,下載當日的資料可以簡化,確實就順利下載到檔案了



然後可以用批次檔來設計判斷是否有下載,寫了測試 5MINS.BAT
@echo off
echo %DATE% %TIME%
EzTwseDL ""
if errorlevel 2 goto :DownloadOK
if errorlevel 1 goto :DownloadFaild
goto :EndBat

:DownloadOK
echo Download OK.
goto :EndBat

:DownloadOKFaild
echo Download Faild!
goto :EndBat

:EndBat
執行批次檔就會像這樣



我是在乾淨Win7上面試的,想說也到XP試試看,結果是


所以看起來是交易所把TLS1.0的支援給關閉了

不然應該也是可以用吧!

我下載到的工具程式和上面的的批次檔大家也可以試試看



寫程式呼叫的話也是變得很簡單{:4_209:}

不過這程式有個bug耶! 但只是有礙觀瞻不影響功能
看看有沒有人也像我一樣會發現這問題{:4_186:}


Prochihua 發表於 19-11-24 14:35

本帖最後由 Prochihua 於 19-11-24 14:36 編輯

謝謝ram大大提供的小程式
我以前是跑出一個txt檔,然後把網址丟到迅雷或是IDM下載
現在稍微改了一下
把以下的程式碼存成python的,然後跟EzTfeDL.exe放在一起再執行就好

import os
import datetime
import time

#取得現在的日期

now=datetime.datetime.now()

#設定開始的日期

start_date_str="2019-11-15"

start_date=datetime.datetime.strptime(start_date_str,'%Y-%m-%d')

#計算相差幾天

days=now-start_date

days=days.days

delta=datetime.timedelta(days=1)

count_days=1

while(count_days<=days+1):
      date_str=start_date.strftime("%Y_%m_%d")
      print(date_str)
      
      #使用EzTfeDL下載期貨和選擇權的資料
      a=os.system("EzTfeDL.exe /url /file/taifex/Dailydownload/DailydownloadCSV/Daily_"+date_str+".zip /out Daily_"+date_str+".zip")
      time.sleep(1)
      a=os.system("EzTfeDL.exe /url /file/taifex/Dailydownload/OptionsDailydownloadCSV/OptionsDaily_"+date_str+".zip /out OptionsDaily_"+date_str+".zip")
      time.sleep(1)
      start_date=start_date+delta
      count_days+=1


使用前先更改一下start_date的日期
就抓從start_date到今天的期貨和選擇權的資料
如果不要選擇權的資料
就把a=os.system("EzTfeDL.exe /url /file/taifex/Dailydownload/OptionsDailydownloadCSV/OptionsDaily_"+date_str+".zip /out OptionsDaily_"+date_str+".zip")
這行給刪掉就好

至於EzTfeDL.exe的bug? 沒發現@@

若是不想用EzTfeDL.exe的話
也可以稍微改一下輸出成txt檔
再把連結丟到迅雷或是IDM下載也可以

ram 發表於 20-5-19 13:58

Prochihua 發表於 19-11-24 14:35
謝謝ram大大提供的小程式
我以前是跑出一個txt檔,然後把網址丟到迅雷或是IDM下載
現在稍微改了一下


仔細瞧了瞧又回憶了許久, 果然有圖有真相

那個有礙觀瞻的bug在這裡啦!


然後我用的是 EzTwseDL 和P大的 EzTfeDL 功能差不多{:4_163:}

只是一個預設是針對證交所 另一個則是預設針對期交所

5a0585 發表於 20-7-1 22:14

水啦,好東西就是推上去
頁: [1]
查看完整版本: 證券交易所下載改為https