2023年7月10日发(作者:)
python获取股票数据接⼝# encoding: utf8#部分⽹站api数据有bug,这个bug问题不是⾃⾝程序的问题,⽽是第三⽅公司股票的问题__author__ = 'nooper'import refrom math import ceilimport datetimefrom httpGet import httpGetContentfrom common import decimaldef _get_content(content): "处理腾讯股票数据接⼝信息" regex = e(r'"(.*)"') result = l(content) if result: return result[0].split('~')def getStockPosition(code, market): """ 处理股票盘⼝数据分析,分析所占的百分⽐率 /q=s_pksz000858 v_s_pksz000858="0.196~0.258~0.221~0.325"; 以 ~ 分割字符串中内容,下标从0开始,依次为: 0: 买盘⼤单 1: 买盘⼩单 2: 卖盘⼤单 3: 卖盘⼩单 所占有的百分⽐百分⽐率 """ if code and market: url = "/q=s_pk%s%s" % (market, code) content = httpGetContent(url) if content: result_list = _get_content(content) if result_list: stock_dict = {} stock_dict["code"] = code stock_dict["market"] = market stock_dict["buy_big_percent"] = float(result_list[0]) # 买盘⼤单所占百分⽐ stock_dict["buy_small_percent"] = float(result_list[1]) # 买盘⼩单所占百分⽐ stock_dict["sell_big_percent"] = float(result_list[2]) # 卖盘⼤单所占⽐重 stock_dict["sell_small_percent"] = float(result_list[3]) # 买盘⼩单所占⽐重 stock_dict["date"] = () return stock_dict# todo 数据对不上def getStockCashFlow(code, market): """得到股票是资⾦流⼊流出 /q=ff_sz000858 v_ff_sz000858="sz000858~41773.67~48096.67~-6322.99~-5.53~10200.89~14351.02~-4150.13~-3.63~114422.25~53015.90~59770.57~五 粮 液~20121221"; 以 ~ 分割字符串中内容,下标从0开始,依次为: 0: 代码 1: 主⼒流⼊ 2: 主⼒流出 3: 主⼒净流⼊ 4: 主⼒净流⼊/资⾦流⼊流出总和 5: 散户流⼊ 6: 散户流出 7: 散户净流⼊ 8: 散户净流⼊/资⾦流⼊流出总和 9: 资⾦流⼊流出总和1+2+5+6 10: 未知 11: 未知 12: 名字 13: ⽇期 """ if code and market: url = "/q=ff_%s%s" % (market, code) content = httpGetContent(url) if content: result_list = _get_content(content) if result_list: stock_dict = {} stock_dict["code"] = code stock_dict["main_inflow"] = float(result_list[1]) # 主⼒流⼊ stock_dict["main_outflow"] = float(result_list[2]) # 主⼒流出 stock_dict["main_netflow"] = float(result_list[3]) # 主⼒净流⼊ stock_dict["small_inflow"] = float(result_list[5]) # 散户流⼊ stock_dict["small_outflow"] = float(result_list[6]) # 散户流出 stock_dict["small_netflow"] = float(result_list[7]) # 散户净流⼊ income = stock_dict["main_inflow"] + stock_dict["small_inflow"] outcome = stock_dict["main_outflow"] + stock_dict["main_outflow"] print income print outcome print income - outcome stock_dict["unknown_1"] = float(result_list[10]) stock_dict["unknwon_2"] = float(result_list[11]) stock_dict["date"] = result_list[13] # ⽇期 return stock_dictdef getStockCurrentDay(code, Market): ''' 获取股票当⽇数据 腾讯API API地址:/q=sh600383 sh:上海 sz:深圳 返回当天成交数据 code:股票代码 market:股票市场 数据返回@return dict ''' if code and Market: url = '/q=%s%s' % (Market, code) headers = {'Content-type': 'application/x-javascript; charset=GBK'} result = httpGetContent(url=url, headers=headers, charset='gbk') if result: stocklist = _get_content(result) if stocklist: stockdict = {} stockdict['code'] = code # 股票代码 stockdict['name'] = unicode(stocklist[1], 'utf8') # 股票名称 stockdict['last_closing'] = float(stocklist[4]) # 昨⽇收盘价格 stockdict['start'] = float(stocklist[5]) # 开盘价格 stockdict['end'] = float(stocklist[3]) # 当前收盘价格(可以是当前价格) stockdict['high'] = float(stocklist[33]) # 最⾼价格 stockdict['low'] = float(stocklist[34]) # 最低价格 stockdict['buyvol'] = int(stocklist[7]) # 外盘 todo 数据对不上 stockdict["sellvol"] = int(stocklist[8]) # 内盘 todo 数据对不上 stockdict['range_price'] = float(stocklist[31]) # 涨跌价格 stockdict['range_percent'] = float(stocklist[32]) # 涨跌⽐% stockdict['volume'] = int(stocklist[6]) # 成交量(⼿) stockdict['total_price'] = int(stocklist[37]) # 成交额(万元) stockdict['change_rate'] = decimal(stocklist[38]) # 换⼿率 stockdict['pe'] = decimal(stocklist[39]) # 市盈率 stockdict['swing'] = float(stocklist[43]) # 振幅 stockdict['pb'] = float(stocklist[46]) # 股票市净率 stockdict['date'] = stocklist[30][:8] # 时间 stockdict["block"] = False if stockdict["start"] else True #股票是否停牌 return stockdictdef getStockMarket(code): """ ⼤盘数据接⼝信息 上证:code:000001 set=zs 深证:code:399001 set=zs 中⼩板:code:399005 set=zs 创业板: code:399006 set=zs /qp/hq?type=snapshot&code=000001&set=zs """ url = "/qp/hq?type=snapshot&code=%s&set=zs" % code result = httpGetContent(url=url, charset="gbk") if result: result = eval(result) stock_dict = {} stock_dict["date"] = result[0][:10] #⽇期 stock_dict["name"] = unicode(result[2], 'utf8') #名称 stock_dict["range_price"] = float(result[4]) #上涨价格 stock_dict["range_percent"] = float(result[5].strip("%")) #涨幅 stock_dict["start"] = float(result[9]) #开盘价格 stock_dict["high"] = float(result[11]) #最⾼价格 stock_dict["low"] = float(result[13]) #最低价格 stock_dict["last_closing"] = float(result[7]) #昨⽇收 stock_dict["end"] = float(result[3]) #收盘价格 stock_dict["total_sum"] = int(result[18]) #多少万元 stock_dict["volume"] = int(result[14]) #多少⼿ return stock_dicttonghuashun_headers = { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Encoding": "gzip,deflate,sdch", "Accept-Language": "zh-CN,zh;q=0.8", "Cache-Control": "no-cache", "Connection": "keep-alive", "Host": "", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36"}# def getstockBlock():# """# 新浪股票⿊名单数据# ”需要得到单点登录信息“## 新浪股票⿊名单个股# /stock/disallowStock# """# headers = {# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',# 'Cache-Control': "max-age=0",# 'Host': '',# 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36',# 'Cookie': "PHPSESSID=c32fbi3m3sf0he8v1rdem3t006; gxqSignId=02d9c361fe5fc1ab; WBStore=d6acd6adea5a82d3|undefined"## }# url = "/stock/disallowStock"# content = httpGetContent(url=url, headers=headers)# if content:# soup = BeautifulSoup(content)# td_list = _all(text=e('d+'))# return td_listdef __convert_MIN(content): content = ('=')[1] content_list = ('|') stock_dict = {} for sub in content_list: if sub: items = ('~') date = items[0] price_list = items[1].split(';') price_dict = {} for a in price_list: b = (',') start = float(b[0]) #开盘价 high = float(b[1]) #最⾼价格 low = float(b[2]) #最低价格 end = float(b[3]) #结束价格 volum = int(ceil(float(b[4]))) #成交量多少买⼊ total_price = int(ceil(float(b[5]))) #成交额 time = b[6] #时间格式是1030,11:30,1400,1500 price_dict[time] = { "high": high, 'low': low, "end": end, "start": start, "volumn": volum, "total_price": total_price } stock_dict[date] = price_dict return stock_dictdef getStock60MIN(code, market, type=''): """ 不推荐向后复权 得到股票60分钟数据线 API接⼝数据 /?p=stock_min60&info=k_sz_000005&fq=q q是向前复权 b事项后复权 q= 空是不复权 """ if market not in ('sz', 'sh'): return url = "/?p=stock_min60&info=k_%s_%s&fq=%s" % (market, code, type) content = httpGetContent(url=url) if content: return __convert_MIN(content)def getStock30MIN(code, market, type=''): """ 30分钟数据接⼝信息 /?p=stock_min30&info=k_sz_000005&fq= """ if market not in ('sz', 'sh'): return url = "/?p=stock_min30&info=k_%s_%s&fq=%s" % (market, code, type) content = httpGetContent(url=url) if content: return __convert_MIN(content)def getStock15MIN(code, market, type=''): """ 15分钟数据接⼝ /?p=stock_min15&info=k_sz_000005&fq= """ if market not in ('sz', 'sh'): return url = "/?p=stock_min15&info=k_%s_%s&fq=%s" % (market, code, type) content = httpGetContent(url=url) if content: return __convert_MIN(content)def __convert_inner(stock, stock_dict={}): stock_day = (',') if all(stock_day): date = stock_day[0] #⽇期 start = float(stock_day[1]) #开盘价格 high = float(stock_day[2]) #最⾼价格 low = float(stock_day[3]) #最低价格 end = float(stock_day[4]) #收盘价格 volume = int(ceil(float(stock_day[5]))) #成交量 total = int(ceil(float(stock_day[6]))) #成交额 stock_dict[date] = { "date": date, 'start': start, 'high': high, 'low': low, 'end': end, 'volume': volume, 'total': total, } return stock_dictdef __convert_day(content): stock_list = ('=')[1].split('|') stock_dict = {} for stock in stock_list: if stock and (): __convert_inner(stock, stock_dict) # stock_day = (',') # date = stock_day[0] #⽇期 # start = stock_day[1] #开盘价格 # high = stock_day[2] #最⾼价格 # low = stock_day[3] #最低价格 # end = stock_day[4] #收盘价格 # volume = int(ceil(float(stock_day[5]))) #成交量 # total = int(ceil(float(stock_day[6]))) #成交额 # stock_dict[date] = { # "date": date, # 'start': start, # 'high': high, # 'low': low, # 'end': end, # 'volume': volume, # 'total': total, # } return stock_dictdef __convert_week(content): content_list = (';') regex = e('=(.*)$') stock_dict = {} for s in content_list: p = l(s)[0] stock_list = ('|') for week in stock_list: if week: __convert_inner(week, stock_dict) return stock_dict#todo 测试完成def getStockDayHistory(code, market, year='2013', type=''): """ /?p=stock_day&info=k_sz_000005&year=2012,2013&fq= sz:深证 sh:上海 return dict """ url = "/?p=stock_day&info=k_%s_%s&year=%s&fq=%s" % (market, code, year, type) content = httpGetContent(url=url) if content: return __convert_day(content)#todo 测试完成def getStockWeekHistory(code, market, year='2012,2013', type=''): """ x/?p=stock_week&info=k_sz_000005&year=2011,2012,2013&fq= pass """ url = "/?p=stock_week&info=k_%s_%s&year=%s&fq=%s" % (market, code, year, type ) content = httpGetContent(url, tonghuashun_headers) if content: return __convert_week(content)def __convertMonth(content): passdef getStockMonthHistory(code, market, type=''): """ /?p=stock_month&info=k_sz_000671&fq= """ url = "/?p=stock_month&info=k_%s_%s&fq=%s" % (market, code, type) content = httpGetContent(url) if content: passdef main(): # g = getStock60MIN('600847', 'sh') # for k in g: # print k # print g[k] # g = getStockDayHistory("600198", "sh") # print g # import config # # print getStockMarket(AI) print getStockCurrentDay("600383", "sh")if __name__ == "__main__": main()
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688933018a185029.html
评论列表(0条)