U
    y^A5                     @   s   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	m
Z
 ddlmZmZmZmZmZmZmZ dd	 ZG d
d deZG dd deZG dd deZdS )    )unicode_literalsN   )InfoExtractor   )
compat_strcompat_urllib_parse_urlencode)
clean_htmldecode_packed_codesget_element_by_idget_element_by_attributeExtractorErrorohdave_rsa_encryptremove_startc                 C   s   t | d S )Nutf-8)hashlibmd5encode	hexdigest)text r   MC:\Users\TaGoRe\Desktop\beinconnect-dl\binaries\youtube_dl\extractor\iqiyi.pymd5_text   s    r   c                   @   s   e Zd Zdd Zedd Zedd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) IqiyiSDKc                 C   s   || _ || _|| _d S N)targetip	timestamp)selfr   r   r   r   r   r   __init__   s    zIqiyiSDK.__init__c                 C   s   t ttdd t| S )Nc                 S   s
   t | dS N   )intpr   r   r   <lambda>%       z$IqiyiSDK.split_sum.<locals>.<lambda>)r   summaplist)datar   r   r   	split_sum#   s    zIqiyiSDK.split_sumc                 C   s$   t | trt| } tttt| S r   )
isinstancer!   r   r&   r'   )numr   r   r   	digit_sum'   s    
zIqiyiSDK.digit_sumc                 C   s<   |  t| jd d d }|  t| jdd d }||fS )Nr   r   )r-   r   r   r   ZevenZoddr   r   r   even_odd-   s    zIqiyiSDK.even_oddc                 C   s   t | j| _g }td| D ]$}|| j|| ||d    qd| rf|| jdd|  d   |ttt| jdfS )N    r   .)	r   r   rangeappendr(   r'   r!   r   split)r   	chunksizechunksir   r   r   
preprocess2   s    "zIqiyiSDK.preprocessc                    s4   |  d\}}|d dt fdd| | _d S )Nr0   r    c                    s   t |   S r   )r   r"   modulusr   r   r$   =   r%   zIqiyiSDK.mod.<locals>.<lambda>)r8   joinr'   r   )r   r;   r6   r   r   r:   r   mod;   s    zIqiyiSDK.modc                 C   s   dddd}|  |\}}d}tt|D ]N}|dk rJt|| ||  nd}|dkrh||||  7 }q*||| | 7 }q*|| _d S )N   
   d   )         r9   rA   rC   )r8   r2   lenr   r   )r   r5   Zmodulus_mapr6   r   retr7   Zip_partr   r   r   r4   ?   s     zIqiyiSDK.splitc                 C   s@   t | j| _| | jd d | j | | jdd   | _d S r   r   r   r*   r   r   r   r   handle_input16P   s    zIqiyiSDK.handle_input16c                 C   sT   t | j| _d}tdD ]0}| jd| d|d   }|| || 7 }q|| _d S )Nr9   rA   rC   r   )r   r   r2   r*   )r   rE   r7   partr   r   r   handle_input8T   s    zIqiyiSDK.handle_input8c                 C   s$   t | j| _| | j| j | _d S r   rF   rG   r   r   r   	handleSum\   s    zIqiyiSDK.handleSumc                    s`   t | j| _t| j}t|jd|j d|j d |  jd	t
 fddt|7  _d S )Nz%02d)ymdr9   c                    s    |  S r   r   )cstringsr   r   r$   h   r%   zIqiyiSDK.date.<locals>.<lambda>)r   r   time	localtimer   r   tm_yeartm_montm_mdayr<   r'   r(   )r   schemerN   r   rP   r   date`   s    zIqiyiSDK.datec                 C   s$   |   \}}|t| j | | _d S r   r/   r   r   r.   r   r   r   split_time_even_oddj   s    zIqiyiSDK.split_time_even_oddc                 C   s$   |   \}}|t| j | | _d S r   rY   r.   r   r   r   split_time_odd_evenn   s    zIqiyiSDK.split_time_odd_evenc                 C   s4   |  d\}}tt||d  | | j | _d S Nr0   r   )r8   r   r&   r-   r   r   r   r6   r   r   r   r   split_ip_time_sumr   s    zIqiyiSDK.split_ip_time_sumc                 C   s4   |  d\}}| | j|d  tt| | _d S r\   )r8   r-   r   r   r&   r   r]   r   r   r   split_time_ip_sumv   s    zIqiyiSDK.split_time_ip_sumN)__name__
__module____qualname__r   staticmethodr*   r-   r/   r8   r=   r4   rH   rJ   rK   rX   rZ   r[   r^   r_   r   r   r   r   r      s"   

	
r   c                   @   s   e Zd Zdd Zdd ZdS )IqiyiSDKInterpreterc                 C   s
   || _ d S r   )sdk_code)r   re   r   r   r   r   |   s    zIqiyiSDKInterpreter.__init__c                 C   s   t | j| _td| j}t|||}|j|j|j|j|j	|j
|jd}|D ]}td|rt|t|dd   qLtd|r||dd   qLtd|r|t|dd   qL||kr||   qLtd	| qL|jS )
Nzinput=([a-zA-Z0-9]+)\(input)rK   ZhandleInput8ZhandleInput16ZsplitTimeEvenOddZsplitTimeOddEvenZsplitIpTimeSumZsplitTimeIpSumzmod\d+   zdate[ymd]{3}rA   zsplit\d+rB   zUnknown funcion %s)r	   re   refindallr   rK   rJ   rH   rZ   r[   r^   r_   matchr=   r!   rX   r4   r   r   )r   r   r   r   Z	functionssdkZother_functionsfunctionr   r   r   run   s,    	zIqiyiSDKInterpreter.runN)r`   ra   rb   r   rl   r   r   r   r   rd   {   s   rd   c                
   @   s   e Zd ZdZdZdZdZdddddd	d
ddddddddddddddddddd	ddddddddddddd d!ddgZd"d#d$d%d&d&d'd(d)Zd*d+ Z	e
d,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6S )7IqiyiIEiqiyiu	   爱奇艺z9https?://(?:(?:[^.]+\.)?iqiyi\.com|www\.pps\.tv)/.+\.htmlz&http://www.iqiyi.com/v_19rrojlavg.htmlZ 9c1fb1b99d192b21c559e5a1a2cb3c73mp4u.   美国德州空中惊现奇异云团 酷似UFO)idexttitle)url	info_dictz&http://www.iqiyi.com/v_19rrhnnclk.htmlZ b7dc800a4004b1b57749d9abae0472daZ e3f585b550a280af23c98b6cb2be19fbu   re:^(?:名侦探柯南 国语版：第752集 迫近灰原秘密的黑影 下篇|名偵探柯南 國語版：第752集 迫近灰原秘密的黑影 下篇)$zGeo-restricted to China)rs   r   rt   skipz&http://www.iqiyi.com/w_19rt6o8t9p.htmlT)rs   only_matchingz&http://www.iqiyi.com/a_19rrhbc6kt.htmlzhttp://yule.iqiyi.com/pcb.htmlZ 4a0af228fddb55ec96398a364248ed7fu2   第2017-04-21期 女艺人频遭极端粉丝骚扰z&http://www.iqiyi.com/v_19rrny4w8w.htmlZ f3cf468b39dddb30d676f89a91200dc1u   泰坦尼克号)rs   rt   ru   z&http://www.iqiyi.com/a_19rrhb8ce1.htmlZ	202918101u   灌篮高手 国语版)rp   rr   e   )rs   rt   playlist_countz#http://www.pps.tv/w_19rrbav0ph.htmlr   r   rf   rA   rB         )961221417518c                 C   s   |    d S r   )_loginrG   r   r   r   _real_initialize   s    zIqiyiIE._real_initializec                 C   s   d}d}t | ||S )Nl#   o<%
Q7&ib)P.U[())v[_Na_[3<0#7L'0<:T*F76W i  )r   )r)   Ner   r   r   _rsa_fun   s    zIqiyiIE._rsa_func                 C   s   |   \}}|sdS | jdd ddd}|d }tt }d|| |df }t|}|||d	 |}|d
|d d||d}	| jdt|	 d ddd}
ddd}|
d }|dkr|	|}|sd| }|
	dr|d|
d  7 }| j
d|  dS dS )NTz http://kylin.iqiyi.com/get_tokenzGet token for loggingzUnable to get token for loggingnoteerrnoterj   z/apis/reglogin/login.action?lang=zh_TW&area_code=null&email=%s&passwd=%s&agenttype=1&from=undefined&keeplogin=0&piccode=&fromurl=&_pos=1r   r   Z BEA3AA1908656AABCCFF76582C4C6660tokenZ f8d91d57af224da7893dd397d52d811a)r   serverr   Zbird_srcsignZbird_tz http://kylin.iqiyi.com/validate?zValidate credentialszUnable to validate credentialsz=please login via the web interface and enter the CAPTCHA codezbad username or password)ZP00107ZP00117codeA00000zerror %smsgz: zunable to log in: F)_get_login_info_download_jsonr!   rR   r   r   rd   rl   r   get_downloaderreport_warning)r   usernamepasswordr)   rj   r   r   interpr   Zvalidation_paramsZvalidation_resultZMSG_MAPr   r   r   r   r   r      sV       
  

zIqiyiIE._loginc                 C   s\   t t d }d}tt|| | }||d||d}| jd||f |dd ||  dS )	Ni  Z d5fb4bd9d50c4be6948c97edd7254b0eZ 76f90cbd92f94a2e925d83e8ccd22cb7)tvidvidsrcsctz'http://cache.m.iqiyi.com/jp/tmts/%s/%s/c                 S   s
   t | dS )Nvar tvInfoJs=)r   )sr   r   r   r$   /  r%   z&IqiyiIE.get_raw_data.<locals>.<lambda>)transform_sourcequeryheaders)r!   rR   r   r   r   geo_verification_headers)r   r   video_idtmkeyr   paramsr   r   r   get_raw_data   s     
  zIqiyiIE.get_raw_datac                 C   s   d}t d|}|sd S | d|d}| jd|ddd}tt| j|}td	D ]t}| jd
|||f |d| d| d}| 	t
|d|}	|	d d }
|
D ]}|| |d  qt|
|k rR qqR| |||S )N2   zQ<a[^>]+class="site-piclist_pic_link"[^>]+href="(http://www\.iqiyi\.com/.+\.html)"zalbumId\s*:\s*(\d+),zalbum IDzdata-share-title="([^"]+)"zalbum titleF)fatalr   z/http://cache.video.qiyi.com/jp/avlist/%s/%d/%d/zDownload playlist page %dz#Failed to download playlist page %dr   r   r)   vlistvurl)rg   rh   _search_regexr(   r'   
url_result	itertoolscount_download_webpage_parse_jsonr   r3   rD   playlist_result)r   webpageZ	PAGE_SIZElinksalbum_idalbum_titleentriespage_numZpagelist_pageZpagelistr   itemr   r   r   _extract_playlist2  sH          zIqiyiIE._extract_playlistc                 C   sH  | j |ddd}| jd|dd d}|d krD| |}|r<|S td| d|d	}g }td
D ]}| ||}|d dkr|d dkr|   td|d  |d }	|	d D ]>}
d|
krqt|
d }||
d |d| j	
|ddd q|r q| d
| q^| | td|p:ttdd|p:| d|d}|||dS )NZtemp_idzdownload video page)r   z6data-(?:player|shareplattrigger)-tvid\s*=\s*[\'"](\d+)r   )defaultzCan't find any videoz>data-(?:player|shareplattrigger)-videoid\s*=\s*[\'"]([a-f\d]+)r   rB   r   r   ZA00111z!Unable to load data. Error code: r)   ZvidlZm3utxvdro   m3u8_native)rs   	format_idrq   
preferenceprotocolzwidget-videotitleclasszmod-play-titz<<span[^>]+data-videochanged-title="word"[^>]*>([^<]+)</span>rr   )rp   rr   formats)r   r   r   r   r2   r   raise_geo_restrictedr   r3   _FORMATS_MAPr   _sleep_sort_formatsr
   r   r   _html_search_regex)r   rs   r   r   r   r   r   _raw_datar)   streamr   rr   r   r   r   _real_extractS  sj         
  

zIqiyiIE._real_extractN)r`   ra   rb   IE_NAMEIE_DESC
_VALID_URL_NETRC_MACHINE_TESTSr   r   rc   r   r   r   r   r   r   r   r   r   rm      s~   	
6
/!rm   )
__future__r   r   r   rg   rR   commonr   compatr   r   utilsr   r	   r
   r   r   r   r   r   objectr   rd   rm   r   r   r   r   <module>   s   $^#