
    iw              
       Z   d dl Z d dlZd dlZd dlmZmZm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Zd dlmZ d dlmZ d dlmZ d dlZddlmZ d	d
lmZ ddlmZ ddlmZmZ d dlZ ej        d            ej                     ej                     u r ej        ej!        e
j"                   eZ# ed          ed)de$de%dej&        fd                        Z'	 d)dee$         de%dee$ej&        f         fdZ( ed          edeee$         e$f         dej&        fd                        Z) ed          d*de$dej&        fd            Z* ed          de$dej&        fd            Z+ ed          e	 d*de$dee$ee$         f         dej&        fd                        Z, ed          ede$dej&        fd                        Z-de$dee$         fdZ. ed          e	 d*de$deee$         e$df         dej&        fd                        Z/ ed          ede$dej0        fd                         Z1dee$         dej0        fd!Z2dee$ee$         f         deej0        ej&        f         fd"Z3e	 d*de$dee$ee$         f         dej&        fd#            Z4d+de$d&e%d'e$ddfd(Z5dS ),    N)ListUnionDict)BeautifulSoup)jsonpath)retry)tqdm   )
to_numeric   )EastmoneyFundHeaders)MagicConfig)sessionMAX_CONNECTIONSmodule   )tries@  	fund_codepzreturnc                    |  ddddddd| ddddddd}d}t                               |t          |d	
                                          }g }g d}|t	          j        ||          S |d         }t          |          dk    rt	          j        ||          S g }|D ]6}|d         }	|                    |	|d         |d         |d         d           7t	          j        |          }
|
S )u  
    根据基金代码和要获取的页码抓取基金净值信息

    Parameters
    ----------
    fund_code : str
        6 位基金代码
    pz : int, optional
        页码, 默认为 40000 以获取全部历史数据

    Returns
    -------
    DataFrame
        包含基金历史净值等数据

    Examples
    --------
    >>> import efinance as ef
    >>> ef.fund.get_quote_history('161725')
        日期    单位净值    累计净值     涨跌幅
    0    2021-06-11  1.5188  3.1499   -3.09
    1    2021-06-10  1.5673  3.1984    1.69
    2    2021-06-09  1.5412  3.1723    0.11
    3    2021-06-08  1.5395  3.1706    -6.5
    4    2021-06-07  1.6466  3.2777    1.61
    ...         ...     ...     ...     ...
    1469 2015-06-08  1.0380  1.0380  2.5692
    1470 2015-06-05  1.0120  1.0120  1.5045
    1471 2015-06-04  0.9970  0.9970      --
    1472 2015-05-29  0.9950  0.9950      --
    1473 2015-05-27  1.0000  1.0000      --

    true1ttjj6.2.8IphoneEFund)FCODE
IsShareNet	MobileKeyappType
appVersioncTokendeviceid	pageIndexpageSizeplatproductserverVersionuTokenuserIdversionz=https://fundmobapi.eastmoney.com/FundMNewApi/FundMNHisNetListF)headersdataverify)u   日期u   单位净值u   累计净值	   涨跌幅NcolumnsDatasr   FSRQDWJZLJJZJZZZL)fund_sessiongetr   jsonpd	DataFramelenappend)r   r   r/   urljson_responserowsr3   datasstockdatedfs              ?/usr/local/lib/python3.11/dist-packages/efinance/fund/getter.pyget_quote_historyrH      sE   L G  D" JC $$)U %  
dff  DEEEG|D'2222'"E
5zzQ|D'2222D 	
 	
V} %f %f"7^	 	
 	
 	
 	
 
d		BI    
fund_codesc                    i t          t          |                     t          j        t	          dd          dt
          ffd                        }| D ]} ||           t          j                                                      |                    t          j
                  rt          j        dd	          S S )
Ntotalr   r   r   delayr   c                    t          t          j                              t          k    rt	          j        d           t          |           }|| <                       d                               d|             d S )Nr   r   Processing => )	r>   multitaskingget_active_tasksr   timesleeprH   updateset_description_str)r   _dfdfspbarr   s     rG   startz&get_quote_history_multi.<locals>.startu   sx     |,..//?BBJqMMM	2..IA  !=)!=!=>>>>>rI   r   Taxisignore_index)r	   r>   rR   taskr   strwait_for_taskscloser:   r   	RETURN_DFr<   concat)rJ   r   kwargsr[   frY   rZ   s    `   @@rG   get_quote_history_multirg   o   s     $&Cc*oo&&&D
!? ? ? ? ? ? ? ?  ?   a!!!JJLLLzz+'(( 9y148888JrI   c                    t          | t                    s| g} dddd                    |           dddddd	d
d}ddddddd}d}t                              |t
          |                                          }t          |d          }|s)t          j	        |
                                          }|S t          j	        |                              |          |
                                         }|S )u  
    获取基金实时估算涨跌幅度

    Parameters
    ----------
    fund_codes : Union[List[str], str]
        6 位基金代码或者 6 位基金代码构成的字符串列表

    Returns
    -------
    DataFrame
        单只或者多只基金实时估算涨跌情况

    Examples
    --------
    >>> import efinance as ef
    >>> # 单只基金
    >>> ef.fund.get_realtime_increase_rate('161725')
        基金代码            基金名称    最新净值    最新净值公开日期              估算时间  估算涨跌幅
    0  161725  招商中证白酒指数(LOF)A  2.8856  2021-09-07  2021-09-07 15:00   0.64

    >>> # 多只基金
    >>> ef.fund.get_realtime_increase_rate(['161725','005827'])
        基金代码            基金名称    最新净值    最新净值公开日期              估算时间  估算涨跌幅
    0  161725  招商中证白酒指数(LOF)A  2.8856  2021-09-07  2021-09-07 15:00   0.64
    1  005827       易方达蓝筹精选混合  2.5704  2021-09-07  2021-09-07 15:00   0.67

    r   300000 ,falseF$3EA024C2-7F22-408B-95E4-383D38160FB3r   r   r   )r&   r'   SortFcodes
SortColumnIsShowSEPr%   r(   r)   r-      基金代码u   基金名称   最新净值u   最新净值公开日期u   估算时间u   估算涨跌幅)r   	SHORTNAMEACCNAVPDATEGZTIMEGSZZLz8https://fundmobapi.eastmoney.com/FundMNewApi/FundMNFInfo)r.   r/   z$..Datas[:]r2   )
isinstancelistjoinr9   r:   r   r;   r   r<   r=   valuesrename)rJ   r/   r3   r@   rA   rB   rF   s          rG   get_realtime_increase_rater      s   @ j$'' " \
((:&&: D  # + " G EC $$) %  
dff  M=11D \'.."2"2333		d			"	"7	"	3	3GNN4D4D	EBIrI   ftc                     g d}dddddd}| |                     d	| f           d
}t                              |||          }ddg}t          j        d|j                  }t          j        ||          }|S )uh  
    获取天天基金网公开的全部公墓基金名单

    Parameters
    ----------
    ft : str, optional
        基金类型可选示例如下

        - ``'zq'``  : 债券类型基金
        - ``'gp'``  : 股票类型基金
        - ``'etf'`` : ETF 基金
        - ``'hh'``  : 混合型基金
        - ``'zs'``  : 指数型基金
        - ``'fof'`` : FOF 基金
        - ``'qdii'``: QDII 型基金
        - ``None``  : 全部

    Returns
    -------
    DataFrame
        天天基金网基金名单数据

    Examples
    --------
    >>> import efinance as ef
    >>> # 全部类型的基金
    >>> ef.fund.get_fund_codes()
    >>> # 股票型基金
    >>> ef.fund.get_fund_codes(ft = 'gp')
        基金代码                  基金简称
    0     003834              华夏能源革新股票
    1     005669            前海开源公用事业股票
    2     004040             金鹰医疗健康产业A
    3     517793                 1.20%
    4     004041             金鹰医疗健康产业C
    ...      ...                   ...
    1981  012503      国泰中证环保产业50ETF联接A
    1982  012517  国泰中证细分机械设备产业主题ETF联接C
    1983  012600             中银内核驱动股票C
    1984  011043             国泰价值先锋股票C
    1985  012516  国泰中证细分机械设备产业主题ETF联接A

    ))opdy)dtkf)rsrj   )gs0)scqjzf)stdesc)esr   )qdiirj   )pir   )pn50000)dxr   
keep-alivezMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75*/*z/http://fund.eastmoney.com/data/fundranking.html/zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connectionz
User-AgentAcceptRefererzAccept-LanguageNr   z/http://fund.eastmoney.com/data/rankhandler.aspxr.   paramsrt      基金简称z"(\d{6}),(.*?),r2   )r?   r9   r:   refindalltextr<   r=   )r   r   r.   r@   responser3   resultsrF   s           rG   get_fund_codesr      s    Z  F # \DL G 
~tRj!!!
;CWVDDH~.Gj+X];;G	gw	/	/	/BIrI   c                 $   d|  d}t                               |          }|st          j                    S |j        }t          |d          }|                    dd                              d          }|d         j        j        }d		                    d
 |d                             d          D                       }|d         j        j        }|d                             d          j        }	|d         j        j        
                    dd          
                    dd          
                    dd          }
t          j        | ||	|||
t          t          j        d                                                    ggg d          S )Nz"http://fundf10.eastmoney.com/jjjl_z.htmlzhtml.parserdivbs_gl)class_labelr   ;c                     g | ]	}|j         
S  )r   ).0as     rG   
<listcomp>z$get_fund_manager.<locals>.<listcomp>#  s    CCCACCCrI   r   r   r
   r      rj   
 today)rt   u   基金经理任职日期   基金公司u   基金经理u   基金种类u   基金规模u   当前日期)r/   r3   )r9   r:   r<   r=   r   r   findfind_allspanr}   replacer`   to_datetimerE   )r   r@   r   htmlsoupcontents
start_datemanagerstype_strcompanyshares              rG   get_fund_managerr     s   
8r
8
8
8C$$H |~~=D}--Dyywy//88AAH!!&JxxCC!)=)=c)B)BCCCDDH{$Hqks##(GQK!))$33;;D"EEMMcSUVVE< BN7++002233


 
 
   rI   datesc                     ddddd}t          j        |                                          }t          |t                    s|g}|dg}g }|D ]}d| fd	d
ddddg}||                    d|f           d}t                              |t          |          	                                }t          |d          }	|	so|d         }t          j        |	          }
||
d<   |
                    dd|            |                    |
           dgt          |                                          z   dgz   }|st          j        |          S t          j        |dd                              |          |         }|S )u  
    获取基金持仓占比数据

    Parameters
    ----------
    fund_code : str
        基金代码
    dates : Union[str, List[str]], optional
        日期或者日期构成的列表
        可选示例如下

        - ``None`` : 最新公开日期
        - ``'2020-01-01'`` : 一个公开持仓日期
        - ``['2020-12-31' ,'2019-12-31']`` : 多个公开持仓日期


    Returns
    -------
    DataFrame
        基金持仓占比数据

    Examples
    --------
    >>> import efinance as ef
    >>> # 获取最新公开的持仓数据
    >>> ef.fund.get_invest_position('161725')
        基金代码    股票代码  股票简称   持仓占比  较上期变化        公开日期
    0  161725  600519  贵州茅台  16.78   1.36  2022-03-31
    1  161725  600809  山西汾酒  15.20   0.52  2022-03-31
    2  161725  000568  泸州老窖  14.57  -0.89  2022-03-31
    3  161725  000858   五粮液  12.83  -1.26  2022-03-31
    4  161725  002304  洋河股份  11.58   0.91  2022-03-31
    5  161725  603369   今世缘   3.75  -0.04  2022-03-31
    6  161725  000799   酒鬼酒   3.40  -0.91  2022-03-31
    7  161725  000596  古井贡酒   3.27  -0.24  2022-03-31
    8  161725  600779   水井坊   2.59  -0.26  2022-03-31
    9  161725  603589   口子窖   2.30  -0.38  2022-03-31
    >>> # 获取近 2 个公开持仓日数据
    >>> public_dates = ef.fund.get_public_dates('161725')
    >>> ef.fund.get_invest_position('161725',public_dates[:2])
        基金代码    股票代码  股票简称   持仓占比  较上期变化        公开日期
    0   161725  600519  贵州茅台  16.78   1.36  2022-03-31
    1   161725  600809  山西汾酒  15.20   0.52  2022-03-31
    2   161725  000568  泸州老窖  14.57  -0.89  2022-03-31
    3   161725  000858   五粮液  12.83  -1.26  2022-03-31
    4   161725  002304  洋河股份  11.58   0.91  2022-03-31
    5   161725  603369   今世缘   3.75  -0.04  2022-03-31
    6   161725  000799   酒鬼酒   3.40  -0.91  2022-03-31
    7   161725  000596  古井贡酒   3.27  -0.24  2022-03-31
    8   161725  600779   水井坊   2.59  -0.26  2022-03-31
    9   161725  603589   口子窖   2.30  -0.38  2022-03-31
    10  161725  000568  泸州老窖  15.46   0.57  2021-12-31
    11  161725  600519  贵州茅台  15.42   0.63  2021-12-31
    12  161725  600809  山西汾酒  14.68  -1.72  2021-12-31
    13  161725  000858   五粮液  14.09   0.87  2021-12-31
    14  161725  002304  洋河股份  10.67  -1.34  2021-12-31
    15  161725  000799   酒鬼酒   4.31   0.09  2021-12-31
    16  161725  603369   今世缘   3.79   0.81  2021-12-31
    17  161725  000596  古井贡酒   3.51  -0.69  2021-12-31
    18  161725  600779   水井坊   2.85  -0.41  2021-12-31
    19  161725  603589   口子窖   2.68   2.68  2021-12-31

    u   股票代码u   股票简称u   持仓占比u   较上期变化)GPDMGPJCJZBLPCTNVCHGr2   Nr   )r"   r   r%   rn   r(   r   r)   r   )r*   r   )r-   r   DATEzBhttps://fundmobapi.eastmoney.com/FundMNewApi/FundMNInverstPositionr   z$..fundStocks[:]	Expansionu   公开日期r   rt   Tr\   )r<   r=   r~   r{   r   r?   r9   r:   r   r;   r   insertr|   rd   r   )r   r   r3   rF   rY   rE   r   r@   rA   stocksrX   fieldss               rG   get_invest_positionr   ?  s   L %	 G 
gnn..	/	/	/BeT"" } C  i @ & 
 MM64.)))R$((-f ) 
 

$&& 	 -);<< 	[)l6"""N

1ni000

3W^^%5%5 6 66.9IIF ,|F++++	3QT	2	2	2	9	9'	9	J	J6	RBIrI   c                    dd| fddddddd	f	}d
}t                               |t          |                                          }dddddd}ddddddddddd
}|d         d         }t	          j        |d                   }|t          |                                                                       |           }|	                                |d<   |
                    d!d"|            |S )#u  
    获取基金阶段涨跌幅度

    Parameters
    ----------
    fund_code : str
        6 位基金代码

    Returns
    -------
    DataFrame
        指定基金的阶段涨跌数据

    Examples
    --------
    >>> import efinance as ef
    >>> ef.fund.get_period_change('161725')
        基金代码     收益率   同类平均  同类排行  同类总数   时间段
    0  161725   -6.28   0.07  1408  1409   近一周
    1  161725   10.85   5.82   178  1382   近一月
    2  161725   25.32   7.10    20  1332   近三月
    3  161725   22.93  10.39    79  1223   近六月
    4  161725  103.76  33.58     7  1118   近一年
    5  161725  166.59  55.42     9   796   近两年
    6  161725  187.50  48.17     2   611   近三年
    7  161725  519.44  61.62     1   389   近五年
    8  161725    6.46   5.03   423  1243  今年以来
    9  161725  477.00                     成立以来
    )
AppVersion6.3.8r   )r!   rn   	OSVersionz14.3r   )
passportid3061335960830820r   r   )r-   6.3.6zAhttps://fundmobapi.eastmoney.com/FundMNewApi/FundMNPeriodIncreaser   u	   收益率u   同类平均u   同类排行u   同类总数u	   时间段)sylavgrankr   titleu	   近一周u	   近一月u	   近三月u	   近六月u	   近一年u	   近两年u	   近三年u	   近五年u   今年以来u   成立以来)
ZY3Y6Y1N2Y3N5NJNLNr   	ESTABDATEr4   r2   r   rt   )r9   r:   r   r;   r<   r=   r|   keysr   r~   r   )r   r   r@   rA   r3   titlesr   rF   s           rG   get_period_changer     s'   D 	 	)=<*
F NC $$)& %  
dff   G  F k*;7I	mG,	-	-B	D  	!	(	(	(	9	9BmmooB{OIIa+++IrI   c                     d| fddddddf}d}t                               |t          |	                                          }|d
         g S |d
         S )u  
    获取历史上更新持仓情况的日期列表

    Parameters
    ----------
    fund_code : str
        6 位基金代码

    Returns
    -------
    List[str]
        指定基金公开持仓的日期列表

    Examples
    --------
    >>> import efinance as ef
    >>> public_dates = ef.fund.get_public_dates('161725')
    >>> # 展示前 5 个
    >>> public_dates[:5]
    ['2021-03-31', '2021-01-08', '2020-12-31', '2020-09-30', '2020-06-30']

    r   r#   r   r   r   r   r*   r   r-   r   zAhttps://fundmobapi.eastmoney.com/FundMNewApi/FundMNIVInfoMultipler   r4   )r9   r:   r   r;   )r   r   r@   rA   s       rG   get_public_datesr     sx    2 
)<"F NC $$)& %  
dff  W%	!!rI   c           	         dddddd}t          j        |                                          }t          |t                    s|g}n|dg}|D ]}d	| fd
ddddddg}||                    d|f           t          |          }d}t                              ||t                    
                                }t          |d                   dk    rt          j        |d                   |                                         }|                    |          }t          j        ||gdd          }|                    dd|            |S )u  
    获取指定基金不同类型占比信息

    Parameters
    ----------
    fund_code : str
        6 位基金代码
    dates : Union[List[str], str, None]
        可选值类型示例如下(后面有获取 dates 的例子)

        - ``None`` : 最新公开日期
        - ``'2020-01-01'`` : 一个公开持仓日期
        - ``['2020-12-31' ,'2019-12-31']`` : 多个公开持仓日期


    Returns
    -------
    DataFrame
        指定基金的在不同日期的不同类型持仓占比信息

    Examples
    --------
    >>> import efinance as ef
    >>> # 获取持仓公开日期
    >>> public_dates = ef.fund.get_public_dates('005827')
    >>> # 取前两个公开持仓日期
    >>> dates = public_dates[:2]
    >>> ef.fund.get_types_percentage('005827',dates)
        基金代码   股票比重 债券比重  现金比重         总规模(亿元) 其他比重
    0  005827   94.4   --  6.06  880.1570625231    0
    0  005827  94.09   --  7.63   677.007455712    0

    u   股票比重u   债券比重u   现金比重u   总规模(亿元)u   其他比重)GPZQHBJZCQTr2   Nr   r   r   )r%   z$3EA024C2-7F21-408B-95E4-383D38160FB3r   r   r   r   r   zEhttps://fundmobapi.eastmoney.com/FundMNewApi/FundMNAssetAllocationNew)r   r.   r4   r   Tr\   rt   )r<   r=   r~   r{   r   r?   tupler9   r:   r   r;   r>   r   r   rd   r   )	r   r   r3   rF   rE   r   r@   rA   rX   s	            rG   get_types_percentager   &  s|   P " G 
gnn..	/	/	/BeT"" 	 = =i !#@ & 	
 MM64.)))vU$(((< ) 
 

$&& 	 }W%&&!++l=1227<<>>Bjjj))YCyqt<<<IIa+++IrI   c           	         d| fddddf}d}t                               |t          |                                          }dd	d
dddddd}|d         }|s=t	          j        d| d           t          j        |                                          S t          j        |d                   	                    |          |                                         }|
                    d           }|S )u   
    获取基金的一些基本信息

    Parameters
    ----------
    fund_code : str
        6 位基金代码

    Returns
    -------
    Series
        基金的一些基本信息
    r   r   r   r   r   zDhttps://fundmobapi.eastmoney.com/FundMNewApi/FundMNNBasicInformationr   rt   r   u   成立日期r1   ru   r   u   净值更新日期u   简介)r   rv   r   RZDFr6   JJGSr5   COMMENTSr4   u   可能有误)indexc                     t          | t                    r(|                     dd                                          n| S )Nr   r   )r{   r`   r   strip)xs    rG   <lambda>z&get_base_info_single.<locals>.<lambda>  s5    *Q:L:LS!))D#..44666RS rI   )r9   r:   r   r;   richprintr<   Seriesr~   r   apply)r   r   r@   rA   r3   itemsss          rG   get_base_info_singler  u  s   $ 
)<F QC $$)& %  
dff   ##$	 	G '"E 1
>9n===yw~~//0000
	-())00w0??@P@PQA	SSTTAHrI   c                 (   g t           j        t          dd          dt          ddffd                        }t	          t          |                     | D ]} ||           t          j                     t          j                  }|S )	u   
    获取多只基金基本信息

    Parameters
    ----------
    fund_codes : List[str]
        6 位基金代码列表

    Returns
    -------
    Series
        多只基金基本信息
    r   r   rN   r   r   Nc                     t          |           }                    |                                                                d|             d S )NrQ   )r  r?   rV   set_description)r   r  rZ   sss     rG   r[   z#get_base_info_muliti.<locals>.start  sQ     !++
		!9i99:::::rI   rL   )	rR   r_   r   r`   r	   r>   ra   r<   r=   )rJ   r[   r   rF   rZ   r  s       @@rG   get_base_info_mulitir    s     
B
!; ; ; ; ; ; ; ;  ; c*oo&&&D  	i!!!	b		BIrI   c                     t          | t                    rt          |           S t          | d          rt	          |           S t          d|  d          )uf  
    获取基金的一些基本信息

    Parameters
    ----------
    fund_codes : Union[str, List[str]]
        6 位基金代码 或多个 6 位 基金代码构成的列表

    Returns
    -------
    Union[Series, DataFrame]
        基金的一些基本信息

        - ``Series`` : 包含单只基金基本信息(当 ``fund_codes`` 是字符串时)
        - ``DataFrane`` : 包含多只股票基本信息(当 ``fund_codes`` 是字符串列表时)

    Raises
    ------
    TypeError
        当 fund_codes 类型不符合要求时

    Examples
    --------
    >>> import efinance as ef
    >>> ef.fund.get_base_info('161725')
    基金代码                                 161725
    基金简称                         招商中证白酒指数(LOF)A
    成立日期                             2015-05-27
    涨跌幅                                   -6.03
    最新净值                                 1.1959
    基金公司                                   招商基金
    净值更新日期                           2021-07-30
    简介        产品特色：布局白酒领域的指数基金，历史业绩优秀，外资偏爱白酒板块。
    dtype: object

    >>> # 获取多只基金基本信息
    >>> ef.fund.get_base_info(['161725','005827'])
        基金代码            基金简称        成立日期   涨跌幅    最新净值   基金公司      净值更新日期                                    简介00:00,  6.38it/s]
    0  005827       易方达蓝筹精选混合  2018-09-05 -2.98  2.4967  易方达基金  2021-07-30  明星消费基金经理另一力作，A+H股同步布局，价值投资典范，适合长期持有。
    1  161725  招商中证白酒指数(LOF)A  2015-05-27 -6.03  1.1959   招商基金  2021-07-30     产品特色：布局白酒领域的指数基金，历史业绩优秀，外资偏爱白酒板块。

    __iter__u
   所给的 u    不符合参数要求)r{   r`   r  hasattrr  	TypeError)rJ   s    rG   get_base_infor    s_    X *c"" 0#J///	Z	(	( 0#J///
CCCC
D
DDrI   c           	      J   ddddd}t          j        |                                          }t          |t                    r|g}n|dg}|D ]}d| fd	d
dddddg}||                    d|f           d}t                              |t          |          }|	                                d         }t          j        |          }	|	
                    |          }	t          j        ||	gdd          }|                    dd|            |                                }|S )uO	  
    获取指定基金行业分布信息

    Parameters
    ----------
    fund_code : str
        6 位基金代码
    dates : Union[str, List[str]], optional
        日期
        可选示例如下

        - ``None`` : 最新公开日期
        - ``'2020-01-01'`` : 一个公开持仓日期
        - ``['2020-12-31' ,'2019-12-31']`` : 多个公开持仓日期

    Returns
    -------
    DataFrame
        指定基金行业持仓信息

    Examples
    --------
    >>> import efinance as ef
    >>> # 获取持仓公开日期
    >>> public_dates = ef.fund.get_public_dates('161725')
    >>> # 取前一个公开持仓日期
    >>> dates = public_dates[:1]
    >>> ef.fund.get_industry_distribution('161725',dates)
    0   161725               制造业  93.07  2021-06-30  6492580.019556
    1   161725               金融业   0.01  2021-06-30      485.060688
    2   161725          农、林、牧、渔业      0  2021-06-30        0.585078
    3   161725  电力、热力、燃气及水生产和供应业      0  2021-06-30        1.302039
    4   161725               建筑业      0  2021-06-30        2.537137
    5   161725            批发和零售业      0  2021-06-30        5.888394
    6   161725   信息传输、软件和信息技术服务业      0  2021-06-30      157.037536
    7   161725     水利、环境和公共设施管理业      0  2021-06-30        4.443833
    8   161725                教育      0  2021-06-30        1.626203
    9   161725        科学研究和技术服务业      0  2021-06-30        48.30805
    10  161725               采矿业     --  2021-06-30              --
    11  161725       交通运输、仓储和邮政业     --  2021-06-30              --
    12  161725          租赁和商务服务业     --  2021-06-30              --
    13  161725            住宿和餐饮业     --  2021-06-30              --
    14  161725              房地产业     --  2021-06-30              --
    15  161725     居民服务、修理和其他服务业     --  2021-06-30              --
    16  161725           卫生和社会工作     --  2021-06-30              --
    17  161725         文化、体育和娱乐业     --  2021-06-30              --
    18  161725                综合     --  2021-06-30              --
    19  161725                合计  93.08  2021-06-30  6493286.808514

    u   行业名称u   持仓比例u   公布日期u   市值)HYMCZJZBLr5   SZr2   Nr   )r   z14.4r   r   r   r   r   r   r   zChttps://fundmobapi.eastmoney.com/FundMNewApi/FundMNSectorAllocationr   r4   r   Tr\   rt   )r<   r=   r~   r{   r`   r?   r9   r:   r   r;   r   rd   r   drop_duplicates)
r   r   r3   rF   rE   r   r@   r   rC   rX   s
             rG   get_industry_distributionr    sQ   p 	 G 
gnn..	/	/	/B% 	 = = i !#@ & 	
 MM64.)))S##C1Ef#UU(l5!!jjj))YCyqt<<<IIa+++					BIrI      pdf	max_countsave_dirc                   
 dddddd
t           j        t          dd	          	 ddt          dt          dt          ddf
fd                        }d| fdddf}t                              d
|                                          }d}t          t          |t          |d                                       t          j                                      st          j                   |d         | d         D ]2}|d         }|                    |d                   }	 || |	|           3t          j                                                      t#          |  d d|  d           dS ) uM  
    根据基金代码获取其全部 pdf 报告

    Parameters
    ----------
    fund_code : str
        6 位基金代码
    max_count : int, optional
        要获取的最大个数个 pdf (从最新的的开始数), 默认为 ``12``
    save_dir : str, optional
        pdf 保存的文件夹路径, 默认为 ``'pdf'``

    Examples
    --------
    >>> import efinance as ef
    >>> # 获取基金代码为 161725 的基金最新的两个 pdf 报道文件
    >>> ef.fund.get_pdf_reports('161725',max_count = 2)
    161725 的 pdf 文件已存储到文件夹 pdf/161725 中
    r   zMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36 Edg/89.0.774.77r   zhttp://fundf10.eastmoney.com/r   r   r   r   rN   .pdfr   r@   filenamer   Nc                 D                        d|             t          |           } t          j                            	dz   | z             st          j        	dz   | z              t                              |          }	 d|  d| | }t          |d          5 }|	                    |j
                   ddd           n# 1 swxY w Y   t          j                            |          dk    rt          j        |           dS                     d           dS )uM  
        根据文件名、文件直链等参数下载文件

        Parameters
        ----------
        fund_code : str
            6 位基金代码
        url : str
            下载连接
        filename : str
            文件后缀名
        file_type : str, optional
            文件类型, 默认为 '.pdf'
        rQ   /)r.   wbNr   r   )r  r`   ospathexistsmkdirr9   r:   openwritecontentgetsizeremoverV   )
r   r@   r  	file_typer   r$  rf   r.   rZ   r  s
          rG   download_filez&get_pdf_reports.<locals>.download_files  sR   ( 	9i99:::	NN	w~~hny899 	1HX^i/000##C#99>>Y>>>9>>$ 	&GGH$%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&7??4  A%%IdOOOFAs    CCCfundcode)r&   r   )r'   200000)type3z&http://api.fund.eastmoney.com/f10/JJGGr   z$http://pdf.dfcfw.com/pdf/H2_{}_1.pdfDatarL   TITLEIDu%    的 pdf 文件已存储到文件夹 r!  u    中)r  )rR   r_   r   r`   r9   r:   r;   r	   minr>   r#  r$  r%  r&  formatra   rb   r  )r   r  r  r-  r   rA   	base_linkitemr   download_urlr.   rZ   s     `       @@rG   get_pdf_reportsr:  V  s   , # \2L G 
!;A  ,/	        @ 
Y	F !$$0'& %  
dff  7Ic)Sv)>%?%?@@AAAD7>>(## 
f%yjkk2 6 6W ''T
33iu5555!!!JJLLL	Y
W
WX
W
W	
W
W
WXXXXXrI   )r   )N)r  r  )6r#  r   signaltypingr   r   r   	threadingbs4r   rR   pandasr<   requestsr  r   r   	tqdm.autor	   rT   utilsr   configr   common.configr   sharedr   r   warningsfilterwarningscurrent_threadmain_threadSIGINTkillallr9   r`   intr=   rH   rg   r   r   r   r   r   r   r   r  r  r  r  r  r:  r   rI   rG   <module>rM     s   				 				  $ $ $ $ $ $ $ $ $ $                                              ( ( ( ( ( ( ' ' ' ' ' ' - - - - - - - -    ! ! !9!6!6!8!888FM&-!5666 QK K K# K", K K K  K^ &+ S	"	#r|
   2 Q>5cC+@ >R\ > > >  >B QJ Js Jbl J J J JZ Q" " " " " "J Q37k kk d3i0k\k k k  k\ QH H H H H  HV'" '"S	 '" '" '" '"T Q9=J JJ cC!56J\J J J  JZ Q,C ,BI , , ,  ,^T#Y 29    B0EeCcN3 0Ebi>U8V 0E 0E 0E 0Ef 37X XX d3i0X\X X X XvUY UYs UYs UY3 UYSW UY UY UY UY UY UYrI   