2021永豐金鐵人賽
初學者在使用的時候,可能會遇到下列錯誤訊息:
File "/usr/local/lib/python3.8/dist-packages/shioaji/shioaji.py", line 300, in place_order
trade = self._solace.place_order(contract, order, timeout, cb)
File "shioaji/backend/solace/api.pyx", line 488, in shioaji.backend.solace.api.SolaceAPI.place_order
File "shioaji/backend/solace/api.pyx", line 453, in shioaji.backend.solace.api.SolaceAPI._place_order_cb
shioaji.error.TokenError: 401 : Token is expired.
其中較重要的一句是:
TokenError: 401 : Token is expired.
Token是後端server用來判別使用者身分的一個依據,就像一把鑰匙。任何透過API執行指令的行為,Client side都需要帶著Token向server請求,server才會接受這個請求。
使用API登入後就可以取得Token,而這個Token的效期是一天,因此如果程式沒有關掉或是沒有登出的情況下,等到時間過了一天,要再次呼叫server的時候,就會遇到上述錯誤,因此建議每天早上8點左右的時候讓程式自動重新登入一次會是比較好的做法,第一個好處是重新登入之後會重抓商品檔,可以取得最新的商品資訊,第二個當然就是避免盤中的時候遇到TokenError的情況。