twstock
twstock copied to clipboard
realtime.get() function issue
sometime i got the issue message as below
{'userDelay': 500, 'rtmessage': ' ', 'rtcode': '0000', 'success': False}
My code:
from twstock import realtime
for stockid in stockidList: for i in range(10): rl = realtime.get(stockid) if rl['success'] == True: latest_trade_price = float(rl['realtime']['latest_trade_price']) break else: latest_trade_price = 0 print(rl) time.sleep(0.5)
我也遇到相同的問題。 具體的情況是發生在一次取得多筆資料,例如['2002', '2886'] 若是僅取得單筆資料不會發生這個問題,例如['2002'] 或 '2002'。 經過使用流覽器測試後發現, 若有先開啟 http://mis.twse.com.tw/stock/index.jsp 後再開啟 http://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=tse_2002.tw|tse_2886.tw&=1518059961000 便可正常取得。 但若一開始(或關閉瀏覽器一段時間後重新開啟)便連結 http://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=tse_2002.tw|tse_2886.tw&=1518059961000 便會得到這個錯誤。
猜想似乎是 realtime.get() 裡面的 requests.Session() 不起作用。 有試圖修改這一段代碼
def get_raw(stocks) -> dict:
req = requests.Session()
req.get(SESSION_URL)
r = req.get(
STOCKINFO_URL.format(
stock_id=_join_stock_id(stocks),
time=int(time.time()) * 1000))
但始終不知要如何在代碼裡面掛勾這兩個連結。
@8888alex 請問這個問題解決了嗎? 我也遇到同樣的問題
@s724959099 我有用浏览器去跟踪 http://mis.twse.com.tw/stock/index.jsp 的内容,发现这个网址本身也会呼叫 getStockInfo.jsp 例如 http://mis.twse.com.tw/stock/api/getStockInfo.jsp?ex_ch=tse_t00.tw|otc_o00.tw|tse_FRMSA.tw&json=1&delay=0&_=1519625027817 之后尝试过修改 headers 去模拟浏览器但无效,暂时还没找到浏览器与 requests 之间的关键区别,所以也还没发现解决的方法....
這樣好像可以
def get_raw(stocks) -> dict:
'''
req = requests.Session()
req.get(SESSION_URL)
r = req.get(
STOCKINFO_URL.format(
stock_id=_join_stock_id(stocks),
time=int(time.time()) * 1000))
'''
s = requests.Session()
req = requests.Request(method='GET', url=SESSION_URL)
prep = req.prepare()
prep.url = STOCKINFO_URL.format(stock_id=_join_stock_id(stocks),time=int(time.time()) * 1000)
r = s.send(prep)
print(r.text)
if sys.version_info < (3, 5):
try:
return r.json()
except ValueError:
return {'rtmessage': 'json decode error', 'rtcode': '5000'}
else:
try:
return r.json()
except json.decoder.JSONDecodeError:
return {'rtmessage': 'json decode error', 'rtcode': '5000'}
I cannot produce in v1.2.0 and current TWSE api, could anyone help?
我也遇到類似的,twstock.realtime.get('1795'),去取不出來