# encoding: utf8
#部分网站api数据有bug,这个bug问题不是自身程序的问题,而是第三方公司股票的问题
__author__= 'nooper'import refrommath import ceil
import datetimefromhttpGet import httpGetContentfrom common import decimaldef _get_content(content):"处理腾讯股票数据接口信息"regex= re.compile(r'"(.*)"')
result=regex.findall(content)ifresult:return result[0].split('~')
def getStockPosition(code, market):"""处理股票盘口数据分析,分析所占的百分比率
http://qt.gtimg.cn/q=s_pksz000858
v_s_pksz000858="0.196~0.258~0.221~0.325";
以~分割字符串中内容,下标从0开始,依次为:0: 买盘大单1: 买盘小单2: 卖盘大单3: 卖盘小单
所占有的百分比百分比率""" ifcode and market:
url= "http://qt.gtimg.cn/q=s_pk%s%s" %(market, code)
content=httpGetContent(url)ifcontent:
result_list=_get_content(content)ifresult_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"] =datetime.date.today()returnstock_dict
# todo 数据对不上
def getStockCashFlow(code, market):"""得到股票是资金流入流出
http://qt.gtimg.cn/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: 日期""" ifcode and market:
url= "http://qt.gtimg.cn/q=ff_%s%s" %(market, code)
content=httpGetContent(url)ifcontent:
result_list=_get_content(content)ifresult_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] # 日期returnstock_dict
def getStockCurrentDay(code, Market):'''获取股票当日数据
腾讯API
API地址:http://qt.gtimg.cn/q=sh600383
sh:上海
sz:深圳
返回当天成交数据
code:股票代码
market:股票市场
数据返回@return dict''' ifcode and Market:
url= 'http://qt.gtimg.cn/q=%s%s' %(Market, code)
headers= {'Content-type': 'application/x-javascript; charset=GBK'}
result= httpGetContent(url=url, headers=headers, charset='gbk')ifresult:
stocklist=_get_content(result)ifstocklist:
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"] elseTrue #股票是否停牌returnstockdict
def getStockMarket(code):"""大盘数据接口信息
上证:code:000001 set=zs
深证:code:399001 set=zs
中小板:code:399005 set=zs
创业板: code:399006 set=zs
http://q.stock.sohu.com/qp/hq?type=snapshot&code=000001&set=zs
""" url = "http://q.stock.sohu.com/qp/hq?type=snapshot&code=%s&set=zs" %code
result= httpGetContent(url=url, charset="gbk")ifresult:
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]) #多少手returnstock_dict
tonghuashun_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": "qd.10jqka.com.cn","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():
#"""# 新浪股票黑名单数据
# ”需要得到单点登录信息“
#
# 新浪股票黑名单个股
# http://weibo.gxq.com.cn/stock/disallowStock
# """# headers ={
#'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#'Cache-Control': "max-age=0",
#'Host': 'weibo.gxq.com.cn',
#'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= "http://weibo.gxq.com.cn/stock/disallowStock"# content= httpGetContent(url=url, headers=headers)
#ifcontent:
# soup=BeautifulSoup(content)
# td_list= soup.find_all(text=re.compile('\d+'))
#returntd_list
def __convert_MIN(content):
content= content.split('=')[1]
content_list= content.split('|')
stock_dict={}for sub incontent_list:ifsub:
items= sub.split('~')
date= items[0]
price_list= items[1].split(';')
price_dict={}for a inprice_list:
b= a.split(',')
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,1500price_dict[time]={"high": high,'low': low,"end": end,"start": start,"volumn": volum,"total_price": total_price
}
stock_dict[date]=price_dictreturnstock_dict
def getStock60MIN(code, market, type=''):"""不推荐向后复权
得到股票60分钟数据线
API接口数据
http://qd.10jqka.com.cn/api.php?p=stock_min60&info=k_sz_000005&fq=q
q是向前复权
b事项后复权
q=空是不复权""" if market not in ('sz', 'sh'):returnurl= "http://qd.10jqka.com.cn/api.php?p=stock_min60&info=k_%s_%s&fq=%s" %(market, code, type)
content= httpGetContent(url=url)ifcontent:return__convert_MIN(content)
def getStock30MIN(code, market, type=''):"""30分钟数据接口信息
http://qd.10jqka.com.cn/api.php?p=stock_min30&info=k_sz_000005&fq=
""" if market not in ('sz', 'sh'):returnurl= "http://qd.10jqka.com.cn/api.php?p=stock_min30&info=k_%s_%s&fq=%s" %(market, code, type)
content= httpGetContent(url=url)ifcontent:return__convert_MIN(content)
def getStock15MIN(code, market, type=''):"""15分钟数据接口
http://qd.10jqka.com.cn/api.php?p=stock_min15&info=k_sz_000005&fq=
""" if market not in ('sz', 'sh'):returnurl= "http://qd.10jqka.com.cn/api.php?p=stock_min15&info=k_%s_%s&fq=%s" %(market, code, type)
content= httpGetContent(url=url)ifcontent:return__convert_MIN(content)
def __convert_inner(stock, stock_dict={}):
stock_day= stock.split(',')ifall(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,
}returnstock_dict
def __convert_day(content):
stock_list= content.split('=')[1].split('|')
stock_dict={}for stock instock_list:ifstock and stock.strip():
__convert_inner(stock, stock_dict)
# stock_day= stock.split(',')
# 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,
# }returnstock_dict
def __convert_week(content):
content_list= content.split(';')
regex= re.compile('=(.*)$')
stock_dict={}for s incontent_list:
p= regex.findall(s)[0]
stock_list= p.split('|')for week instock_list:ifweek:
__convert_inner(week, stock_dict)returnstock_dict
#todo 测试完成
def getStockDayHistory(code, market, year='2013', type=''):""" http://qd.10jqka.com.cn/api.php?p=stock_day&info=k_sz_000005&year=2012,2013&fq=
sz:深证
sh:上海returndict""" url = "http://qd.10jqka.com.cn/api.php?p=stock_day&info=k_%s_%s&year=%s&fq=%s" %(market, code, year, type)
content= httpGetContent(url=url)ifcontent:return__convert_day(content)
#todo 测试完成
def getStockWeekHistory(code, market, year='2012,2013', type=''):""" xhttp://qd.10jqka.com.cn/api.php?p=stock_week&info=k_sz_000005&year=2011,2012,2013&fq=
pass""" url = "http://qd.10jqka.com.cn/api.php?p=stock_week&info=k_%s_%s&year=%s&fq=%s" %(market, code, year, type )
content=httpGetContent(url, tonghuashun_headers)ifcontent:return__convert_week(content)
def __convertMonth(content):
pass
def getStockMonthHistory(code, market, type=''):""" http://qd.10jqka.com.cn/api.php?p=stock_month&info=k_sz_000671&fq=
""" url = "http://qd.10jqka.com.cn/api.php?p=stock_month&info=k_%s_%s&fq=%s" %(market, code, type)
content=httpGetContent(url)ifcontent:
pass
def main():
# g= getStock60MIN('600847', 'sh')
#for k ing:
# print k
# print g[k]
# g= getStockDayHistory("600198", "sh")
# print g
# import config
#
# print getStockMarket(config.SHANGHAI)
print getStockCurrentDay("600383", "sh")if __name__ == "__main__":
main()