
    fi>                        d Z ddlZddlZddlmZ ddlZddlZddlZddl	m
Z
mZmZmZmZmZ ddlmZ  e            defd            Zdej        fdZ	 	 	 	 d(dededededej        f
dZ	 d)dedededej        fdZedk    rr ed	ddd          Z ee            ed	ddd          Z ee            ed	dd          Z ee            ed	d           Z ee            ed	d!           Z ee            ed	d!           Z  ee             ed	"          Z! ee!            e            Z" ee"            ed	d#d$          Z# ee#            ed	dd$          Z# ee#            ed	dd%d&          Z$ ee$            ed	d'd%d          Z% ee%            ed	d           Z ee            ed	d!           Z ee            ed	dd&$          Z# ee#           dS dS )*u   
Date: 2024/7/22 18:30
Desc: 新浪财经-B股-实时行情数据和历史行情数据(包含前复权和后复权因子)
https://finance.sina.com.cn/realstock/company/sh689009/nc.shtml
    N)	lru_cache)zh_sina_a_stock_urlzh_sina_a_stock_hist_urlhk_js_decodezh_sina_a_stock_hfq_urlzh_sina_a_stock_qfq_urlzh_sina_a_stock_amount_url)demjsonreturnc                     d} t          j        |           }t          t          j        t          j        d          |j                  d                   dz  }t          |t                    r|S t          |          dz   S )u   
    所有股票的总页数
    https://vip.stock.finance.sina.com.cn/mkt/#hs_b
    :return: 需要采集的股票总页数
    :rtype: int
    zphttps://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount?node=hs_bz\d+r   P      )requestsgetintrefindallcompiletext
isinstance)urlr
page_counts      H/usr/local/lib/python3.11/dist-packages/akshare/stock/stock_zh_b_sina.py_get_zh_b_page_countr      su    	6  	SARZ
6 2 2AF;;A>??"DJ*c"" #:""    c                  B   t                      } dddddddd}t          j                    }t          d| dz             D ]w}|                    d|i           t          j        t          |	          }t          j	        |j
                  }t          j        |t          j        |          gd
          }xg d|_        |g d         }t          j        |d         d          |d<   t          j        |d         d          |d<   t          j        |d         d          |d<   t          j        |d         d          |d<   t          j        |d         d          |d<   t          j        |d         d          |d<   t          j        |d         d          |d<   t          j        |d         d          |d<   t          j        |d         d          |d<   t          j        |d         d          |d<   t          j        |d         d          |d<   |S )u   
    新浪财经-所有 B 股的实时行情数据; 重复运行本函数会被新浪暂时封 IP
    https://vip.stock.finance.sina.com.cn/mkt/#hs_b
    :return: 所有股票的实时行情数据
    :rtype: pandas.DataFrame
    180symbolhs_b page)r#   numsortascnoder    _s_r_ar   paramsT)objsignore_index)   代码_   名称	   最新价	   涨跌额	   涨跌幅   买入   卖出   昨收   今开   最高   最低	   成交量	   成交额r.   r.   r.   r.   r.   r.   )r-   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r0   coerce)errorsr1   r2   r3   r4   r5   r6   r7   r8   r9   r:   )r   pd	DataFramerangeupdater   r   r   r
   decoder   concatcolumns
to_numeric)r   zh_sina_stock_payload_copybig_dfr#   r   	data_jsons         r   stock_zh_b_spotrH   0   sA    &''J" " \^^Faa(( V V"))64.999L,5OPPPN16**	i)@)@ APTUUU  FN, 	
 	
 	
F" -{(;HMMMF;-{(;HMMMF;-{(;HMMMF;}VH%5hGGGF8}VH%5hGGGF8}VH%5hGGGF8}VH%5hGGGF8}VH%5hGGGF8}VH%5hGGGF8-{(;HMMMF;-{(;HMMMF;Mr   sh9009011990010121000118r"   r    
start_dateend_dateadjustc                 B    dt           dt          j        f fd}|dv r$ ||                    d          d                   S t	          j        t          j                             }t          j	                    }|
                    t                     |                    d|j                            d          d	                             d
          d                             dd                    }t          j        |          }t          j        |d                   j        j        |_        |d= |d= |d= |                    d          }t	          j        t)          j                              }t+          j        |j        |j                            d          |j                            d          d	z                      }	t          j        |	          }
t          j        |
j                  |
_        |
d= t          j        ||
ddd          }|                    d           |                    t6                    }|d         dz  |d<   |d         |d         z  |d<   g d|_        |dk    r|||         }|                    g dd           t=          |d         d          |d<   t=          |d         d          |d<   t=          |d          d          |d <   t=          |d!         d          |d!<   |                    d           |                    d           |                     d           |S |d"k    r%t	          j        tC          j                             }t          j        t          |j                            d          d	                             d#          d                   d$                   }dd%g|_        t          j        |j                  |_        |d= t          j        ||ddd          }|                    d           |                    t6                    }|                    d           |                    g dd           |d         |d%         z  |d<   |d         |d%         z  |d<   |d!         |d%         z  |d!<   |d          |d%         z  |d <   |j"        d&d&d&d'f         }|||         }t=          |d         d          |d<   t=          |d         d          |d<   t=          |d          d          |d <   t=          |d!         d          |d!<   |                    d           |                     d           |S |d(k    r%t	          j        tG          j                             }t          j        t          |j                            d          d	                             d#          d                   d$                   }dd)g|_        t          j        |j                  |_        |d= t          j        ||ddd          }|                    d           |                    t6                    }|                    d           |                    g dd           |d         |d)         z  |d<   |d         |d)         z  |d<   |d!         |d)         z  |d!<   |d          |d)         z  |d <   |j"        d&d&d&d'f         }|||         }t=          |d         d          |d<   t=          |d         d          |d<   t=          |d          d          |d <   t=          |d!         d          |d!<   |                    d           |                     d           |S d&S )*uf  
    新浪财经-B 股-个股的历史行情数据, 大量抓取容易封 IP
    https://finance.sina.com.cn/realstock/company/sh900901/nc.shtml
    :param start_date: 20201103; 开始日期
    :type start_date: str
    :param end_date: 20201103; 结束日期
    :type end_date: str
    :param symbol: sh600000
    :type symbol: str
    :param adjust: 默认为空: 返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; qfq-factor: 返回前复权因子
    :type adjust: str
    :return: specific data
    :rtype: pandas.DataFrame
    methodr   c                    | dk    rt          j        t          j                            }t	          j        t          |j                            d          d                             d          d                   d                   }|j	        d         dk    rt          d          dd	g|_        t	          j        |j                  |_        |d= |                    d
           |S t          j        t!          j                            }t	          j        t          |j                            d          d                             d          d                   d                   }|j	        d         dk    rt          d          ddg|_        t	          j        |j                  |_        |d= |                    d
           |S )Nhfq=r   
r   datazsina hfq factor not availabledate
hfq_factorTinplace
qfq_factor)r   r   r   formatr=   r>   evalr   splitshape
ValueErrorrC   to_datetimerV   indexreset_indexr   )rP   r   hfq_factor_dfqfq_factor_dfr    s       r   
_fq_factorz$stock_zh_b_daily.<locals>._fq_factor   s   U??4;FCCDDALQV\\#&&q)//55a899&A M "1%** !@AAA%+\$:M!"$.1C"D"DMf%%%d%333  4;FCCDDALQV\\#&&q)//55a899&A M "1%** !@AAA%+\$:M!"$.1C"D"DMf%%%d%333  r   )
hfq-factor
qfq-factor-r   drS   r   ;"r"   rV   amount	prevclosefloat[]Touter)
left_indexright_indexhowrX   i'  volumeturnover)openhighlowcloseru   outstanding_sharerv   )rw   rx   ry   rz   ru   )subsetrY   rw      rx   ry   rz   rR   rT   rU   rW   NqfqrZ   )$strr=   r>   r]   r   r   r   r[   py_mini_racer	MiniRacerr\   r   callr   replacer`   dtrV   ra   astyper	   r
   rA   findrfindmergeffillrn   rC   drop_duplicatesrounddropnarb   r   ilocr   )r    rL   rM   rN   re   r   js_code	dict_listdata_dfamount_data_jsonamount_data_dftemp_dfrc   rd   s   `             r   stock_zh_b_dailyr   |   s   *!3 !2< ! ! ! ! ! !4 ---z&,,s++A.///-4V<<==A%''GLLQV\\#q!'',,Q/77R@@ I l9%%GN76?336;GMnnW%%G/6vvFFGGA~afQV[[-=-=S@Q@QTU@U-U&VWW\"233N>.*=>>NvhDd  G MM$MnnU##G)E1GH!(+gh.??GJ  GO ||*X-.===t 	  	
 	
 	
  3333wu~q11 !1155t$$$---D)))L07??@@T!&,,s*;*;A*>*D*DT*J*J1*M%N%Nv%VWW!' 6 n]-?@@&!(]t7
 
 
 	d###..''t$$$===t 	  	
 	
 	
 "&/GL,AA!&/GL,AA"7+gl.CC ',*??,qqq#2#v&*X-.3333wu~q11 !1155t$$$D)))L07??@@T!&,,s*;*;A*>*D*DT*J*J1*M%N%Nv%VWW!' 6 n]-?@@&!(]t7
 
 
 	d###..''t$$$===t 	  	
 	
 	
 "&/GL,AA!&/GL,AA"7+gl.CC ',*??,qqq#2#v&*X-.3333wu~q11 !1155t$$$D)))7 r   r   periodc                 	   d}| |dd}t          j        ||          }t          j        t	          j        |j                            d          d                             d          d                             j        d	d	d	d
f         }|j	        rt          j                    S 	 t          | d           n	#  |cY S xY w|dk    r|S |dk    r|d         j                            dd          |ddg<   |d |d         D                      }|                    dgdd           t          j        |d                   |_        t          | d          }t          j        |d                   |_        |j        t          |           d	d	d	f         d                             t"                    |d                             t"                    z  }	t          j        |d                   |_        t          j        ||	dd          }
|
d                             t"                    |
d         z  |
d<   |
d                             t"                    |
d         z  |
d<   |
d                             t"                    |
d         z  |
d<   |
d                             t"                    |
d         z  |
d<   |
g d         }|                    dd           |S |d k    r|d         j                            dd          |ddg<   |d! |d         D                      }|                    dgdd           t          j        |d                   |_        t          | d           }t          j        |d                   |_        |j        t          |           d	d	d	f         d                             t"                    |d                             t"                    z  }	t          j        |d                   |_        t          j        ||	dd          }
|
d                             t"                    |
d         z  |
d<   |
d                             t"                    |
d         z  |
d<   |
d                             t"                    |
d         z  |
d<   |
d                             t"                    |
d         z  |
d<   |
g d         }|                    dd           |S d	S )"u  
    股票及股票指数历史行情数据-分钟数据
    https://finance.sina.com.cn/realstock/company/sh900901/nc.shtml
    :param symbol: sh900901
    :type symbol: str
    :param period: 1, 5, 15, 30, 60 分钟的数据
    :type period: str
    :param adjust: 默认为空: 返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据;
    :type adjust: str
    :return: specific data
    :rtype: pandas.DataFrame
    zNhttps://quotes.sina.cn/cn/api/jsonp_v2.php/=/CN_MarketDataService.getKLineData1970)r    scaledatalenr)   z=(r   z);r   N   r   r    rN   r"   day T)expandrV   timec                 6    g | ]}d |cxk    rdk    rn ndndS z09:31:00z15:00:00TF .0items     r   
<listcomp>z%stock_zh_b_minute.<locals>.<listcomp>@  M        #d8888j88888e  r   last)r|   keeprY   rz   )rr   rs   rw   close_yrx   ry   close_x)r   rw   rx   ry   rz   ru   )droprY   rR   c                 6    g | ]}d |cxk    rdk    rn ndndS r   r   r   s     r   r   z%stock_zh_b_minute.<locals>.<listcomp>Y  r   r   )r   r   r=   r>   jsonloadsr   r]   r   emptyr   r   r   r`   ra   lenr   rn   r   rb   )r    r   rN   r   r*   r   r   need_dfstock_zh_b_daily_qfq_df	result_df	merged_dfstock_zh_b_daily_hfq_dfs               r   stock_zh_b_minuter     s     	Y   F
 	S(((Al4:afll4&8&8&;&A&A$&G&G&JKKLLQRSRSRSUWVWUWRWXG} |~~u55555||$+EN$6$<$<S$<$N$N ! #FO  
 	xfdKKKwv77"2&"O"O"O(*7Nv7V(W(W%+0#g,,!!!1CDWMTT
 
G##E**+	 wv77HWiDdSSS	%f-44U;;i	>RR	&%f-44U;;i	>RR	&$U+22599Ii<PP	%&y188??)IBVV	'MMMNt444$+EN$6$<$<S$<$N$N ! #FO  
 	xfdKKKwv77"2&"O"O"O(*7Nv7V(W(W%+0#g,,!!!1CDWMTT
 
G##E**+	 wv77HWiDdSSS	%f-44U;;i	>RR	&%f-44U;;i	>RR	&$U+22599Ii<PP	%&y188??)IBVV	'MMMNt4441 s   (B: :C __main__2007110320240916)r    rL   rM   rN   1990010320240722rR   2010110320210510)r    rL   rM   rg   r   rf   )r    5)r    r   rN   20201116r   20201103)rI   rJ   rK   r"   )rI   r   r"   )&__doc__r   r   	functoolsr   pandasr=   r   r   akshare.stock.consr   r   r   r   r   r	   akshare.utilsr
   r   r   r>   rH   r   r   r   __name__stock_zh_b_daily_hfq_df_oneprintstock_zh_b_daily_hfq_df_threestock_zh_b_daily_hfq_df_tword   rc   stock_zh_b_daily_hfq_factor_dfstock_zh_b_daily_dfstock_zh_b_spot_dfstock_zh_b_minute_dfr   r   r   r   r   <module>r      sd     				                               " ! ! ! ! ! #c # # # #&I I I I IZ  	Z ZZZ Z 	Z
 \Z Z Z Z| @BT TT&)T9<T\T T T Tn z"2"2j:b# # # 
E
%&&&$4$4j:e% % %! 
E
'((("2"2j:# # # 
E
%&&&$$J|LLLM	E-$$J|LLLM	E-%5%5,& & &" 
E
()))***===	E
(**	E
,,JsSUVVV	E
,,JsSUVVV	E
..j:e   
E
!"""..j:e   
E
!"""$$J|LLLM	E-$$J|LLLM	E-,,#e   
E
u r   