3
b`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 j| jdj S )Nzutf-8)hashlibmd5encode	hexdigest)text r   KC:\Users\Broad\Desktop\BeinConnetFix\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>%   s    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 )N)
isinstancer   r   r!   r"   )numr   r   r   	digit_sum'   s    
zIqiyiSDK.digit_sumc             C   s<   | j t| jd d d }| j t| jdd d }||fS )Nr   r   )r(   r   r   )r   evenoddr   r   r   even_odd-   s    zIqiyiSDK.even_oddc             C   s   t | j| _g }x4td| D ]$}|j| j|| ||d    qW d| rj|j| jdd|  d   |ttt| j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   | j d\}}|d djt fdd| | _d S )Nr,   r    c                s   t |   S )N)r   )r   )modulusr   r   r    =   s    zIqiyiSDK.mod.<locals>.<lambda>)r4   joinr"   r   )r   r6   r2   r   r   )r6   r   mod;   s    zIqiyiSDK.modc             C   s   dddd}| j |\}}d}x^tt|D ]N}|dk rLt|| ||  nd}|dkrj||||  7 }q,||| | 7 }q,W || _d S )N   
   d   )         r5   r<   r>   )r4   r.   lenr   r   )r   r1   Zmodulus_mapr2   r   retr3   Zip_partr   r   r   r0   ?   s     zIqiyiSDK.splitc             C   s@   t | j| _| j| jd d | j | j| jdd   | _d S )Nr   )r   r   r%   )r   r   r   r   handle_input16P   s    zIqiyiSDK.handle_input16c             C   sX   t | j| _d}x<tdD ]0}| jd| d|d   }|| j|| 7 }qW || _d S )Nr5   r<   r>   r   )r   r   r.   r%   )r   r@   r3   partr   r   r   handle_input8T   s    zIqiyiSDK.handle_input8c             C   s$   t | j| _| j| j| j | _d S )N)r   r   r%   )r   r   r   r   	handleSum\   s    zIqiyiSDK.handleSumc                s`   t | j| _tj| j}t|jd|j d|j d |  jdj	t
 fddt|7  _d S )Nz%02d)ymdr5   c                s    |  S )Nr   )c)stringsr   r   r    h   s    zIqiyiSDK.date.<locals>.<lambda>)r   r   time	localtimer   r   tm_yeartm_montm_mdayr7   r"   r#   )r   schemerG   r   )rI   r   date`   s    zIqiyiSDK.datec             C   s$   | j  \}}|t| j | | _d S )N)r+   r   r   )r   r)   r*   r   r   r   split_time_even_oddj   s    zIqiyiSDK.split_time_even_oddc             C   s$   | j  \}}|t| j | | _d S )N)r+   r   r   )r   r)   r*   r   r   r   split_time_odd_evenn   s    zIqiyiSDK.split_time_odd_evenc             C   s4   | j d\}}tt||d  | j| j | _d S )Nr,   r   )r4   r   r!   r(   r   r   )r   r2   r   r   r   r   split_ip_time_sumr   s    zIqiyiSDK.split_ip_time_sumc             C   s4   | j d\}}| j| j|d  tt| | _d S )Nr,   r   )r4   r(   r   r   r!   r   )r   r2   r   r   r   r   split_time_ip_sumv   s    zIqiyiSDK.split_time_ip_sumN)__name__
__module____qualname__r   staticmethodr%   r(   r+   r4   r8   r0   rA   rC   rD   rP   rQ   rR   rS   rT   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 )N)sdk_code)r   rZ   r   r   r   r   |   s    zIqiyiSDKInterpreter.__init__c             C   s   t | j| _tjd| j}t|||}|j|j|j|j|j	|j
|jd}x|D ]}tjd|rv|jt|dd   qNtjd|r|j|dd   qNtjd|r|jt|dd   qN||kr||   qNtd	| qNW |jS )
Nzinput=([a-zA-Z0-9]+)\(input)rD   ZhandleInput8ZhandleInput16ZsplitTimeEvenOddZsplitTimeOddEvenZsplitIpTimeSumZsplitTimeIpSumzmod\d+   zdate[ymd]{3}r<   zsplit\d+r=   zUnknown funcion %s)r	   rZ   refindallr   rD   rC   rA   rQ   rR   rS   rT   matchr8   r   rP   r0   r   r   )r   r   r   r   Z	functionssdkZother_functionsfunctionr   r   r   run   s*    

zIqiyiSDKInterpreter.runN)rU   rV   rW   r   ra   r   r   r   r   rY   {   s   rY   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)rh   r   ri   skipz&http://www.iqiyi.com/w_19rt6o8t9p.htmlT)rh   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   泰坦尼克号)rh   ri   rj   z&http://www.iqiyi.com/a_19rrhb8ce1.htmlZ	202918101u   灌篮高手 国语版)re   rg   e   )rh   ri   playlist_countz#http://www.pps.tv/w_19rrbav0ph.htmlr   r   r[   r<   r=         )961221417518c             C   s   | j   d S )N)_login)r   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   | j  \}}|sdS | jdd ddd}|d }ttj }d|| j|jdf }t|}|j||d	 |}|d
|d d||d}	| jdt|	 d ddd}
ddd}|
d }|dkr|j	|}|sd| }|
j	dr|d|
d  7 }| j
jd|  dS dS )NTz http://kylin.iqiyi.com/get_tokenzGet token for loggingzUnable to get token for logging)noteerrnoter_   z/apis/reglogin/login.action?lang=zh_TW&area_code=null&email=%s&passwd=%s&agenttype=1&from=undefined&keeplogin=0&piccode=&fromurl=&_pos=1zutf-8r   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   rJ   r|   r   rY   ra   r   get_downloaderreport_warning)r   usernamepasswordr$   r_   r   r   interpr   Zvalidation_paramsZvalidation_resultZMSG_MAPr   r   r   r   r   rx      sB    



zIqiyiIE._loginc             C   s\   t tj d }d}tt|| | }||d||d}| jd||f |dd || j 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 )Nzvar tvInfoJs=)r   )sr   r   r   r    /  s    z&IqiyiIE.get_raw_data.<locals>.<lambda>)transform_sourcequeryheaders)r   rJ   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 jd|}|sd S | jd|d}| jd|ddd}tt| j|}xtjd	D ]v}| jd
|||f |d| d| d}| j	t
|d|}	|	d d }
x |
D ]}|j| j|d  qW t|
|k rTP qTW | j|||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 %d)r}   r~   zvar tvInfoJs=r$   vlistvurl)r\   r]   _search_regexr#   r"   
url_result	itertoolscount_download_webpage_parse_jsonr   r/   r?   playlist_result)r   webpageZ	PAGE_SIZElinksalbum_idalbum_titleentriespage_numZpagelist_pageZpagelistr   itemr   r   r   _extract_playlist2  s2    

zIqiyiIE._extract_playlistc          	   C   sL  | j |ddd}| jd|dd d}|d krD| j|}|r<|S td| jd|d	}g }xtd
D ]}| j||}|d dkr|d dkr| j  td|d  |d }	xJ|	d D ]>}
d|
krqt|
d }|j|
d |d| j	j
|ddd qW |rP | jd
| q`W | j| td|p>ttdd|p>| j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   r=   r   r   ZA00111z!Unable to load data. Error code: r$   ZvidlZm3utxvdrd   r   m3u8_native)rh   	format_idrf   
preferenceprotocolzwidget-videotitleclasszmod-play-titz<<span[^>]+data-videochanged-title="word"[^>]*>([^<]+)</span>rg   )re   rg   formats)r   r   r   r   r.   r   raise_geo_restrictedr   r/   _FORMATS_MAPr   _sleep_sort_formatsr
   r   r   _html_search_regex)r   rh   r   r   r   r   r   _Zraw_datar$   streamr   rg   r   r   r   _real_extractS  sN    


zIqiyiIE._real_extractN)rU   rV   rW   IE_NAMEIE_DESC
_VALID_URL_NETRC_MACHINE_TESTSr   ry   rX   r|   rx   r   r   r   r   r   r   r   rb      s^   


/!rb   )
__future__r   r   r   r\   rJ   commonr   compatr   r   utilsr   r	   r
   r   r   r   r   r   objectr   rY   rb   r   r   r   r   <module>   s   $^#