Advertisement
yijhan

群益 API in pyhton 報價範例

Aug 15th, 2018
848
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.79 KB | None | 0 0
  1. ###########################################################
  2. # pythoncom 是安裝 pywin32 附的,如果 event 沒反應才需要用到
  3. # 第一次使用cc.GetModule, 會在 comtypes\gen\ 下產生幾個.py檔,像是
  4. # _75AAD71C_8F4F_4F1F_9AEE_3D41A8C9BA5E_0_1_0.py
  5. # 如果有 dll 錯誤產生,請檢查 SKCOM.dll 路徑有沒有錯誤
  6. # 如果發生 gen 下沒有 SKCOMLib 錯誤訊息,請將python關閉
  7. # AttributeError: module 'comtypes.gen.SKCOMLib' has no attribute 'SKCenterLib'
  8. # 重新啟動python後,應該就可以找到了
  9. # 如果還是不行,請重新安裝 capital API 元件,注意 API 與python 版本要一致,
  10. # API安裝要以管理員權限執行
  11.  
  12. import pythoncom, time
  13. import comtypes.client as cc
  14. cc.GetModule('C:\\SKCOM\\x86\\SKCOM.dll')
  15. import comtypes.gen.SKCOMLib as sk
  16.  
  17. ts=sk.SKSTOCK()
  18. skC=cc.CreateObject(sk.SKCenterLib,interface=sk.ISKCenterLib)
  19. skQ=cc.CreateObject(sk.SKQuoteLib,interface=sk.ISKQuoteLib)
  20. skR=cc.CreateObject(sk.SKReplyLib,interface=sk.ISKReplyLib)
  21.  
  22. #Some Configure
  23. ID='身分證'
  24. PW='密碼'
  25.  
  26. #想取得報價的股票代碼
  27. strStocks='TSEA'
  28.  
  29. #define functions
  30. def OnRequestQuote(strStocks = strStocks):
  31.     skQ.SKQuoteLib_RequestStocks(1, strStocks)
  32.     print("OnRequestQuote(),", strStocks)
  33. def getStock(nMarket, nIndex, ts):
  34.     skQ.SKQuoteLib_GetStockByIndex(nMarket, nIndex, ts)
  35.     print(ts.bstrStockName, ts.bstrStockNo,  ts.nClose/10**ts.sDecimal)
  36. def pump():
  37.     pythoncom.PumpWaitingMessages()
  38.  
  39. #建立事件類別
  40. class skQ_events:
  41.     def OnConnection(self, nKind, nCode):
  42.         if nCode == 0 :
  43.             if nKind == 3001 :
  44.                 print("skQ OnConnection, nkind= ", nKind)
  45.             elif (nKind == 3003):
  46.                 skQ.SKQuoteLib_RequestStocks(1, strStocks)
  47.                 print("skQ OnConnection, request stocks, nkind= ", nKind)
  48.     def OnNotifyQuote(self, sMarketNo, sStockIdx):
  49.         skQ.SKQuoteLib_GetStockByIndex(sMarketNo, sStockIdx, ts)
  50.  
  51. class skR_events:
  52.     def OnConnect(self, bstrUserID, bstrData):
  53.         print('skR_OnConnect!')
  54.     def OnComplete(self, bstrUserID):
  55.         print('OnCompleted!' )
  56.  
  57. #Event sink
  58. EventQ=skQ_events()
  59. EventR=skR_events()
  60.  
  61. #make connection to event sink
  62. ConnectionQ = cc.GetEvents(skQ, EventQ)        
  63. ConnectionR = cc.GetEvents(skR, EventR)
  64.  
  65. #Login
  66. print("Login,", skC.SKCenterLib_GetReturnCodeMessage(skC.SKCenterLib_Login(ID,PW)))
  67. #先呼叫 SKReplyLib_ConnectByID ,再 EnterMonitor,才會可以收到 OnConnection 3003 的回報
  68. print("ConnectByID,", skC.SKCenterLib_GetReturnCodeMessage(skR.SKReplyLib_ConnectByID(ID)))
  69. time.sleep(1)
  70.  
  71. #登錄報價伺服器
  72. print("EnterMonitor,", skC.SKCenterLib_GetReturnCodeMessage(skQ.SKQuoteLib_EnterMonitor()))
  73.  
  74. #每秒 pump event 一次
  75. for i in range(15):
  76.     time.sleep(1)
  77.     pump()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement