def xueqiu(code='SH600036', access_token=xq_a_token): if code.startswith('60') or code.startswith('51'): code = 'SH' + code elif len(code) == 5: code = code elif code == '999999' or code == '999998': return Stock(code=code, current=1) elif len(code) == 6: code = 'SZ' + code url = api_home + '/v4/stock/quote.json?code={}&_=1443253485389' url = url.format(code) print(url) payload = {'access_token': access_token} r = requests.get(url, params=payload, headers=headers) # print r # print r.json() data = r.json().get(code) print('data:{} code:{}'.format(data, code)) if data: # Wed Dec 27 14:59:59 +0800 2017 stock = Stock( code=code, # name=data.get('name').encode("GB2312"), current=data.get('current'), percentage=data.get('percentage'), open_price=data.get('open'), high=data.get('high'), low=data.get('low'), close=data.get('close'), low52week=data.get('low52week'), high52week=data.get('high52week'), change=data.get('change'), pb=data.get('pb')) time = data.get('time') print(time) if time: time = arrow.get(time, 'ddd MMM DD HH:mm:ss Z YYYY') print(time) stock.date = time.datetime print(stock) return stock else: return None
def xueqiu(code='SH600036', access_token=xq_a_token): if code.startswith('60') or code.startswith('51'): code = 'SH'+code elif len(code) == 5: code = code elif code == '999999' or code == '999998': return Stock(code=code, current=1) elif len(code) == 6: code = 'SZ'+code url = api_home+'/v4/stock/quote.json?code={}&_=1443253485389' url = url.format(code) print(url) payload = {'access_token': access_token} r = requests.get(url, params=payload, headers=headers) # print r # print r.json() data = r.json().get(code) print('data:{} code:{}'.format(data, code)) if data: # Wed Dec 27 14:59:59 +0800 2017 stock = Stock(code=code, # name=data.get('name').encode("GB2312"), current=data.get('current'), percentage=data.get('percentage'), open_price=data.get('open'), high=data.get('high'), low=data.get('low'), close=data.get('close'), low52week=data.get('low52week'), high52week=data.get('high52week'), change=data.get('change'), pb=data.get('pb')) time = data.get('time') print(time) if time: time = arrow.get(time, 'ddd MMM DD HH:mm:ss Z YYYY') print(time) stock.date = time.datetime print(stock) return stock else: return None
def getCSVHistorialData(code,save = True,beginDate = '',endDate = str(date.today())): from lxml import etree #yahoo stock ticker need post-fix ".SS" for Shanghai,'.SZ' for shenzheng if (len(code) == 9): code2 = code elif (code.startswith('6')): code2 = code +".SS" else: code2 = code +".SZ" begin = beginDate.split('-') end = endDate.split('-') period = '&d='+(str)(int(end[1])-1)+'&e='+end[2]+'&f='+end[0]+'&a='+(str)(int(begin[1])-1)+'&b='+begin[2]+'&c='+begin[0] url = 'http://ichart.finance.yahoo.com/table.csv?s='+code2+period logger.debug(url) #check whether data is update to latest #from stocktrace.dao.stockdao import findLastUpdate #from stocktrace.dao.stockdao import findOldestUpdate lastStock = findLastUpdate(code) oldestStock = findOldestUpdate(code) page = parse(url).getroot() logger.debug(page) result = etree.tostring(page) #print result lines = result.split('\n') from stocktrace.stock import Stock historyDatas = [] for a in lines: if a.find('html')!= -1: continue #print etree.tostring(tree) datas = a.split(',') #print datas stock = Stock(code) stock.date = datas[0] stock.high = float(datas[2]) stock.low = float(datas[3]) stock.openPrice = float(datas[1]) stock.close = float(datas[4]) stock.volume = float(datas[5]) isNewData = True; if lastStock is not None: isNewData = (stock.date > lastStock['date']) or (stock.date < oldestStock['date']) #print stock.date+'***isNewData***'+str(isNewData) if isNewData and save: saveStock(stock); #print stock historyDatas.append(stock) historyDatas.sort(key=lambda item:item.date,reverse=True) if (len(historyDatas) == 0): logger.warning("No data downloaded for "+code) else: # update_week52(code) logger.info(str(len(historyDatas))+" history Data downloaded for "+code)
def getHistorialData(code,save = True,beginDate = '',endDate = str(date.today())): from lxml import etree from lxml.html import parse #yahoo stock ticker need post-fix ".SS" for Shanghai,'.SZ' for shenzheng if (len(code) == 9): code2 = code elif (code.startswith('6')): code2 = code +".SS" else: code2 = code +".SZ" # if len(endDate) == 0: # print "Download all history date for "+code # from datetime import date # url = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20%3D%20%22'+code2+'%22%20and%20startDate%20%3D%20%22'+beginDate+'%22%20and%20endDate%20%3D%20%22'+str(date.today())+'%22&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys' # else: # url = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20%3D%20%22'+code2+'%22%20and%20startDate%20%3D%20%22'+beginDate+'%22%20and%20endDate%20%3D%20%22'+endDate+'%22&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys' url = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20%3D%20%22'+code2+'%22%20and%20startDate%20%3D%20%22'+beginDate+'%22%20and%20endDate%20%3D%20%22'+endDate+'%22&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys' logger.debug(url) #check whether data is update to latest #from stocktrace.dao.stockdao import findLastUpdate #from stocktrace.dao.stockdao import findOldestUpdate lastStock = findLastUpdate(code) oldestStock = findOldestUpdate(code) # print lastStock # print oldestStock # print date.today().weekday() # print beginDate #check whether beginDate is weekday begin = datetime.strptime(beginDate,'%Y-%m-%d').date() beginWeekday = begin.weekday() if (beginWeekday == 5): delta = timedelta(2) begin = begin+delta elif (beginWeekday == 6): delta = timedelta(1) begin = begin+delta # print begin.weekday() beginDate = str(begin) isUpdatedToDate = False if lastStock is None and oldestStock is None: print 'Begin to download history data for '+code else: print code+" Current history data range "+oldestStock['date']+"~"+lastStock['date'] isUpdatedToDate = (endDate <= lastStock['date']) and (beginDate >= oldestStock['date']) if isUpdatedToDate: print "History data is updated to latest:"+code return page = parse(url).getroot() result = etree.tostring(page) print result r = page.xpath('//quote'); historyDatas = [] for a in r: tree= etree.ElementTree(a) #print etree.tostring(tree) stock = Stock(code) stock.date = tree.xpath('//date')[0].text stock.high = float(tree.xpath('//high')[0].text) stock.low = float(tree.xpath('//low')[0].text) stock.openPrice = float(tree.xpath('//open')[0].text) stock.close = float(tree.xpath('//close')[0].text) stock.volume = float(tree.xpath('//volume')[0].text) isNewData = True; if lastStock is not None: isNewData = (stock.date > lastStock['date']) or (stock.date < oldestStock['date']) #print stock.date+'***isNewData***'+str(isNewData) if isNewData and save: saveStock(stock); #print stock historyDatas.append(stock) historyDatas.sort(key=lambda item:item.date,reverse=True) if (len(historyDatas) == 0): print "No data downloaded for "+code else: logger.info(str(len(historyDatas))+" history Data downloaded for "+code) # redclient.set(code,historyDatas[0].date) # for stock in historyDatas: # print stock # pass for i in range(len(historyDatas)): if i == len(historyDatas)-1: continue else: last = historyDatas[i] prev = historyDatas[i+1] if (last.openPrice!= prev.close and (last.low >prev.high or last.high<prev.low)): #print "gap***"+last.__str__() pass
def getCSVHistorialData(code='600276', save=True, beginDate='', endDate=str(date.today())): from lxml import etree #yahoo stock ticker need post-fix ".SS" for Shanghai,'.SZ' for shenzheng if len(code) == 9: code2 = code elif code.startswith('6'): code2 = code + ".SS" else: code2 = code + ".SZ" begin = beginDate.split('-') end = endDate.split('-') print 'begin:{} end:{}'.format(begin, end) period = '&d=' + ( str)(int(end[1]) - 1) + '&e=' + end[2] + '&f=' + end[0] + '&a=' + ( str)(int(begin[1]) - 1) + '&b=' + begin[2] + '&c=' + begin[0] url = 'http://ichart.finance.yahoo.com/table.csv?s=' + code2 + period logger.debug(url) #check whether data is update to latest #from stocktrace.dao.stockdao import findLastUpdate #from stocktrace.dao.stockdao import findOldestUpdate lastStock = findLastUpdate(code) oldestStock = findOldestUpdate(code) page = parse(url).getroot() if page is None: logger.error('Fail to download history data for:{}'.format(url)) logger.debug(page) result = etree.tostring(page) #print result lines = result.split('\n') from stocktrace.stock import Stock historyDatas = [] for a in lines: if a.find('html') != -1: continue #print etree.tostring(tree) datas = a.split(',') #print datas stock = Stock(code) stock.date = datas[0] stock.high = float(datas[2]) stock.low = float(datas[3]) stock.open_price = float(datas[1]) stock.close = float(datas[4]) stock.volume = float(datas[5]) isNewData = True if lastStock is not None: isNewData = (stock.date > lastStock['date']) or ( stock.date < oldestStock['date']) #print stock.date+'***isNewData***'+str(isNewData) if isNewData and save: # saveStock(stock) stock.save() #print stock historyDatas.append(stock) historyDatas.sort(key=lambda item: item.date, reverse=True) if len(historyDatas) == 0: logger.warning("No data downloaded for " + code) else: # update_week52(code) logger.info( str(len(historyDatas)) + " history Data downloaded for " + code)
def getHistorialData(code, save=True, beginDate='', endDate=str(date.today())): from lxml import etree from lxml.html import parse #yahoo stock ticker need post-fix ".SS" for Shanghai,'.SZ' for shenzheng if (len(code) == 9): code2 = code elif (code.startswith('6')): code2 = code + ".SS" else: code2 = code + ".SZ" # if len(endDate) == 0: # print "Download all history date for "+code # from datetime import date # url = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20%3D%20%22'+code2+'%22%20and%20startDate%20%3D%20%22'+beginDate+'%22%20and%20endDate%20%3D%20%22'+str(date.today())+'%22&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys' # else: # url = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20%3D%20%22'+code2+'%22%20and%20startDate%20%3D%20%22'+beginDate+'%22%20and%20endDate%20%3D%20%22'+endDate+'%22&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys' url = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.historicaldata%20where%20symbol%20%3D%20%22' + code2 + '%22%20and%20startDate%20%3D%20%22' + beginDate + '%22%20and%20endDate%20%3D%20%22' + endDate + '%22&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys' logger.debug(url) #check whether data is update to latest #from stocktrace.dao.stockdao import findLastUpdate #from stocktrace.dao.stockdao import findOldestUpdate lastStock = findLastUpdate(code) oldestStock = findOldestUpdate(code) # print lastStock # print oldestStock # print date.today().weekday() # print beginDate #check whether beginDate is weekday begin = datetime.strptime(beginDate, '%Y-%m-%d').date() beginWeekday = begin.weekday() if (beginWeekday == 5): delta = timedelta(2) begin = begin + delta elif (beginWeekday == 6): delta = timedelta(1) begin = begin + delta # print begin.weekday() beginDate = str(begin) isUpdatedToDate = False if lastStock is None and oldestStock is None: print 'Begin to download history data for ' + code else: print code + " Current history data range " + oldestStock[ 'date'] + "~" + lastStock['date'] isUpdatedToDate = (endDate <= lastStock['date']) and ( beginDate >= oldestStock['date']) if isUpdatedToDate: print "History data is updated to latest:" + code return page = parse(url).getroot() result = etree.tostring(page) print result r = page.xpath('//quote') historyDatas = [] for a in r: tree = etree.ElementTree(a) #print etree.tostring(tree) stock = Stock(code) stock.date = tree.xpath('//date')[0].text stock.high = float(tree.xpath('//high')[0].text) stock.low = float(tree.xpath('//low')[0].text) stock.openPrice = float(tree.xpath('//open')[0].text) stock.close = float(tree.xpath('//close')[0].text) stock.volume = float(tree.xpath('//volume')[0].text) isNewData = True if lastStock is not None: isNewData = (stock.date > lastStock['date']) or ( stock.date < oldestStock['date']) #print stock.date+'***isNewData***'+str(isNewData) if isNewData and save: saveStock(stock) #print stock historyDatas.append(stock) historyDatas.sort(key=lambda item: item.date, reverse=True) if (len(historyDatas) == 0): print "No data downloaded for " + code else: logger.info( str(len(historyDatas)) + " history Data downloaded for " + code) # redclient.set(code,historyDatas[0].date) # for stock in historyDatas: # print stock # pass for i in range(len(historyDatas)): if i == len(historyDatas) - 1: continue else: last = historyDatas[i] prev = historyDatas[i + 1] if (last.openPrice != prev.close and (last.low > prev.high or last.high < prev.low)): #print "gap***"+last.__str__() pass