定義好資料庫大架構後,就可以開始思考,個股的資料要從哪裡來,一般有幾個常用來源,台灣證卷交易所、 Yahoo Finance及Google Finance ,但Yahoo一直有要收費的訊息,Google用起來好像沒有很順暢,最後還是直接到證交所去抓資料,但有些上櫃及興櫃資料則要到櫃買中心抓了。
實際驗證起來,透過不同API取得資料的複雜度好像都差不多,都需要先弄清楚他的資料格式。目前透過Web API取得的資料大部分都是用JSON這個格式,以下來分析證交所的資料格式,我們以每日收盤的個股股價資訊來分析,但證交所只能抓上市個股,上櫃股票只能由櫃買中心想辦法了。
證交所的每日個股URL格式為 https://www.twse.com.tw/exchangeReport/MI_INDEX?date=20210903&type=ALLBUT0999 ,但我們的目標是讓系統可以自動抓每天的股價,由上面的URL,可以看到date這個參數,因此我們可以改變這個參數來調整抓資料的日期,當然透過這個參數,也是可以抓到更久以前的資料。
另外,櫃買的每日個股URL格式為https://www.tpex.org.tw/openapi/v1/tpex_mainboard_daily_close_quotes?l=zh-tw&d=110/09/03&s=0,asc,0 ,他的日期格式則有些不一樣,在設計時要特別注意。
證交所資料格式分析
由抓到的格式,我們先一層一層分析,先看結構的第一層,有兩個重要資訊,”date” 可以讓我們確認抓到的日期是否符合,”stat”則用來確認URL下的指令是否正確。
確認了指令的正確性後,可以發現這資料還有另一個規則性,他有9個資料區塊,每個資料都有Subtitle、Fields 、 AlignsStyle 、Data及Note開頭的欄位名稱,但我們主要是要抓各股的交易價、量等資訊, 所以直接抓”data9″的資料就行了,當然可以參照一下”fields9″這個資訊,確認data9的資料內容。
找到了個股的收盤行情後,依照”field9″,就可以對應到”data9″的內容,”data9″是用array的方式紀錄每一筆個股的收盤資訊,如下的對應。
之後抓資料只要先把抓到的資料,轉成php的json_decode函數將抓到的資料轉成array,再取data9的資料並轉入資料庫即完成這第一個資料的轉換。
櫃買中心資料格式分析
透過櫃買中心的URL取得資料後,可以發現他的資料格式跟證交所的不大一樣,不過他比較單純一些,資料就是把每一檔個股的收盤資料一筆一筆的列出來,如下的呈現,
因此我們只要分析單一筆資料就行了,如下對應到相關的資料,以下就列出會用到的部分。
定時採集各股資料
了解了資料格式後,就可以著手開始蒐集資料,主程式是到證交所即櫃買中心蒐集當天的資料後,接著再把資料轉到資料庫。可以參考如下的流程設計,
但是這只有當天的資料,所以我們只要再去設定,開發環境的作業系統 ubuntu的cronjob功能,就可以每天定時去做資料採集了。
36 13-14 * * * /usr/bin/php /home/kevin/TWStock/html/twstock/main/tool/transtockcounter_twse.php > /tmp/tmp_transtockcounter_twse.log 2>&1
因為台灣股市在1:30會結束交易,而盤後交易會在14:00~14:30,因此,設定在13:36 及14:36時去抓股市資訊。