免費的A股實時數據下載方案(新浪財經)

新浪財經實時深度和成交數據:

github:https://github.com/QuantGin/Quant_For_All

import sys
from mylog import mylog
logger=mylog(sys.argv[0].split('/')[-1]).get_logger()
import requests
import threading

def get_trade(stk,n=10):
    stk=to_shsz(stk)
    # url='http://vip.stock.finance.sina.com.cn/quotes_service/view/CN_TransListV2.php?num=50&symbol=sh600000'
    url='https://vip.stock.finance.sina.com.cn/quotes_service/view/CN_TransListV2.php?num='+str(n)+'&symbol='+stk
    r=requests.get(url)
    s=r.text
    if s.find('var trade_item_list = new Array()')==-1:
        raise(ValueError())
    s=s.replace("'",'')
    s=s.replace('var trade_item_list = new Array();\n','')
    s=s.split('\n var trade_INVOL_OUTVOL')[0]
    l=[]
    for key in s.split('\n'):
        if key.find('new Array')!=-1:
            dic={'code':press_code(stk)}
            dic['time'],dic['amount'],dic['price'],dic['side']=key.split('(')[-1].split(')')[0].split(', ')
            l.append(dic)
    return l
# get_trade('sh600000'),get_trade('600100.XSHG')

def get_depth(stk_list):
    stk=''
    if isinstance(stk_list,list):
        for key in stk_list:
            stk+=to_shsz(key)+','
    else:
        stk=to_shsz(stk_list)
    r=requests.get('https://hq.sinajs.cn/list='+stk)
    ss=r.text
#     print(ss)
    if ss.find('hq_str_')==-1:
        raise(ValueError(ss))
    l0=[]
    for s in ss.split('var '):
        if len(s)>0 and s.find('""')==-1:
            code=s.split('=')[0].split('_')[-1]
            l=s.split(',')[10:32]
            l.reverse()
            fields=['a5_v', 'a5_p', 'a4_v', 'a4_p', 'a3_v', 'a3_p',
                    'a2_v', 'a2_p', 'a1_v', 'a1_p', 'b1_v', 'b1_p',
                    'b2_v', 'b2_p', 'b3_v', 'b3_p', 'b4_v', 'b4_p',
                    'b5_v', 'b5_p']
            dic={'code':press_code(code)}
            for key in fields:
                dic[key]=l.pop()
            dic['datetime']=l[1]+' '+l[0]
            l0.append(dic)
    return l0
# len(get_depth(get_stk_list()[:893]))
def get_all_depth(stk_list):
    def _run(stk_list2,l):
        try:
            l+=get_depth(stk_list2)
        except:
            logger.error(traceback.format_exc())
            return []
    l=[]
    jobs=[]
    stk_list1=stk_list
    while len(stk_list1)>0:
        stk_list2=stk_list1[:800]
        stk_list1=stk_list1[800:]
        job=threading.Thread(target=_run,args=(stk_list2,l))
        job.start()
        jobs.append(job)
    for job in jobs:
        job.join()
    return l

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章