[問題] 獲取證交所即時股價

看板Python作者 (thebelief)時間7年前 (2017/05/09 12:21), 7年前編輯推噓5(5013)
留言18則, 6人參與, 最新討論串1/1
Hi 大家好,以下是我的問題 目前正在嘗試從證交所取得即時股票資訊 但有時候可以成功,有時候會失敗... 我找不出錯誤的原因,希望各位可以幫忙 =====以下是程式碼===== targets = ['6188', '5478', '6488'] #關注的股票代碼 endpoint = 'http://mis.twse.com.tw/stock/api/getStockInfo.jsp' timestamp = int(time.time() * 1000 + 1000) channels = '|'.join('otc_{}.tw'.format(target_otc) for target_otc in targets) query_url = '{}?&ex_ch={}&json=1&delay=0&_={}'.format(endpoint, channels, timestamp) headers = {'Accept-Language': 'zh-TW'} req = requests.session() req.get('http://mis.twse.com.tw/stock/index.jsp', headers=headers) response = req.get(query_url) content = json.loads(response.text) # 註解1 data = content['msgArray'] # 需要的訊息被包在'msgArray'裡面 print(data) =====程式碼結束===== 當我執行以上程式,有時候可以成功獲取資訊 但是常常失敗的結果是顯示: data_otc = content_otc['msgArray'] KeyError: 'msgArray' 於是我試著印出 #註解1 的content: 只剩下{'userDelay': 500, 'rtmessage': '0', 'rtcode': '0000'} 'msgArray'的確消失了. 我找不出是什麼原因會導致失敗,希望各位可以幫我解惑... 謝謝各位耐心閱讀我的問題! *補充說明一下,如果有成功 印出來的data會像: {'msgArray': (股票資訊), 'userDelay': 5000, 'rtmessage': 'OK', 'rtcode': '0000'} -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.139.148.49 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1494303664.A.BDA.html ※ 編輯: a856479 (101.139.148.49), 05/09/2017 12:51:34

05/09 12:55, , 1F
header 幹嘛不抄完?
05/09 12:55, 1F

05/09 13:33, , 2F
header部份有嘗試過加入更多資訊,但沒有改善,所以最後
05/09 13:33, 2F

05/09 13:33, , 3F
只留下那段
05/09 13:33, 3F

05/09 13:35, , 4F
我疑惑的地方是,為什麼有時候會成功有時候失敗
05/09 13:35, 4F

05/09 14:50, , 5F
server block 吧, rtmessage 不是回傳 '0' 嗎....y
05/09 14:50, 5F

05/09 15:13, , 6F
我有另一個一樣的腳本,因為上市跟上櫃股票的詞綴不一樣
05/09 15:13, 6F

05/09 15:13, , 7F
。但也只有將 channels = '|'.join('otc_{}. 的otc_改成t
05/09 15:13, 7F

05/09 15:13, , 8F
se_{}.,去取得上市股票資訊。每次都是同時執行,可是就
05/09 15:13, 8F

05/09 15:13, , 9F
沒出錯過。還是腳本裡面有哪裡是我可以改善的部份嗎?
05/09 15:13, 9F

05/09 21:42, , 10F
使用你的程式碼測試好幾次都沒失敗過耶0.0
05/09 21:42, 10F

05/09 22:50, , 11F
我試跑幾次,真的有原Po描述的情形
05/09 22:50, 11F

05/09 22:53, , 12F
呃 哈哈,有點囧。謝謝大家幫忙測試
05/09 22:53, 12F

05/09 23:38, , 13F
我是用 python3.5 不知道有沒有關係?
05/09 23:38, 13F

05/10 09:34, , 14F
最rock的方法就是開wireshark抓看request有沒有不同
05/10 09:34, 14F

05/10 09:34, , 15F
如果request基本上都一樣,那就是server問題了
05/10 09:34, 15F

05/10 13:06, , 16F
server site 應該是有做些防堵
05/10 13:06, 16F

05/10 20:00, , 17F
謝謝大大的分享, 很有趣的Topic
05/10 20:00, 17F

05/10 20:01, , 18F
https://goo.gl/IEtDm2 這是我參考改的
05/10 20:01, 18F
文章代碼(AID): #1P4KEmlQ (Python)
文章代碼(AID): #1P4KEmlQ (Python)