python獲取股票數據接口


# encoding: utf8

#部分網站api數據有bug,這個bug問題不是自身程序的問題,而是第三方公司股票的問題

__author__ = 'nooper'

import re
from math import ceil
import datetime

from httpGet import httpGetContent
from common import decimal


def _get_content(content):
    "處理騰訊股票數據接口信息"
    regex = re.compile(r'"(.*)"')
    result = regex.findall(content)
    if result:
        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: 賣盤小單
    所占有的百分比百分比率
    """
    if code and market:
        url = "http://qt.gtimg.cn/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"] = datetime.date.today()
                return stock_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: 日期
    """
    if code and market:
        url = "http://qt.gtimg.cn/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_dict


def getStockCurrentDay(code, Market):
    '''
    獲取股票當日數據
    騰訊API
    API地址:http://qt.gtimg.cn/q=sh600383
    sh:上海
    sz:深圳
    返回當天成交數據
    code:股票代碼
    market:股票市場
    數據返回@return dict
    '''
    if code 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')
        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 stockdict


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")
    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_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)
#     if content:
#         soup = BeautifulSoup(content)
#         td_list = soup.find_all(text=re.compile('\d+'))
#         return td_list


def __convert_MIN(content):
    content = content.split('=')[1]
    content_list = content.split('|')
    stock_dict = {}
    for sub in content_list:
        if sub:
            items = sub.split('~')
            date = items[0]
            price_list = items[1].split(';')
            price_dict = {}
            for a in price_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,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_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'):
        return

    url = "http://qd.10jqka.com.cn/api.php?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分鍾數據接口信息
    http://qd.10jqka.com.cn/api.php?p=stock_min30&info=k_sz_000005&fq=
    """
    if market not in ('sz', 'sh'):
        return
    url = "http://qd.10jqka.com.cn/api.php?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分鍾數據接口
    http://qd.10jqka.com.cn/api.php?p=stock_min15&info=k_sz_000005&fq=
    """
    if market not in ('sz', 'sh'):
        return
    url = "http://qd.10jqka.com.cn/api.php?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 = stock.split(',')
    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_dict


def __convert_day(content):
    stock_list = content.split('=')[1].split('|')
    stock_dict = {}
    for stock in stock_list:
        if stock 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,
            #     }
    return stock_dict


def __convert_week(content):
    content_list = content.split(';')
    regex = re.compile('=(.*)$')
    stock_dict = {}
    for s in content_list:
        p = regex.findall(s)[0]
        stock_list = p.split('|')
        for week in stock_list:
            if week:
                __convert_inner(week, stock_dict)

    return stock_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:上海
    return dict
    """
    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)
    if content:
        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)
    if content:
        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)
    if content:
        pass


def main():
    # g = getStock60MIN('600847', 'sh')
    # for k in g:
    #     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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM