
    Ği}`                         d dl 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mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d Z G d d	e          Z G d
 de          Z G d de          ZdS )    N   )InfoExtractor)PhantomJSwrapper   )ExtractorError
clean_htmlfloat_or_noneformat_fieldget_element_by_attributeget_element_by_idint_or_none
js_to_jsonparse_age_limitparse_durationparse_iso8601parse_resolution	qualitiesremove_startstr_or_nonetraverse_objurljoinc                 r    t          j        |                                                                           S N)hashlibmd5encode	hexdigest)texts    [C:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/extractor/iqiyi.pymd5_textr       s&    ;t{{}}%%//111    c            
           e 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* Zd+ Z	d, Z
d-S ).IqiyiIEiqiyiu	   爱奇艺z9https?://(?:(?:[^.]+\.)?iqiyi\.com|www\.pps\.tv)/.+\.htmlz&http://www.iqiyi.com/v_19rrojlavg.html 9c1fb1b99d192b21c559e5a1a2cb3c73mp4u.   美国德州空中惊现奇异云团 酷似UFO)idexttitle)url	info_dictz&http://www.iqiyi.com/v_19rrhnnclk.html b7dc800a4004b1b57749d9abae0472da e3f585b550a280af23c98b6cb2be19fbu   re:^(?:名侦探柯南 国语版：第752集 迫近灰原秘密的黑影 下篇|名偵探柯南 國語版：第752集 迫近灰原秘密的黑影 下篇)$zGeo-restricted to China)r*   r   r+   skipz&http://www.iqiyi.com/w_19rt6o8t9p.htmlTr*   only_matchingz&http://www.iqiyi.com/a_19rrhbc6kt.htmlzhttp://yule.iqiyi.com/pcb.html 4a0af228fddb55ec96398a364248ed7fu2   第2017-04-21期 女艺人频遭极端粉丝骚扰z&http://www.iqiyi.com/v_19rrny4w8w.html f3cf468b39dddb30d676f89a91200dc1u   泰坦尼克号)r*   r+   r.   z&http://www.iqiyi.com/a_19rrhb8ce1.html	202918101u   灌篮高手 国语版)r'   r)   e   )r*   r+   playlist_countz#http://www.pps.tv/w_19rrbav0ph.htmlr   r                  )961221417518c                    t          t          j                    dz            }d}t          t          |          |z   |z             }||d||d}|                     d| d| d|d ||                                           S )	N   d5fb4bd9d50c4be6948c97edd7254b0e 76f90cbd92f94a2e925d83e8ccd22cb7)tvidvidsrcsctz!http://cache.m.iqiyi.com/jp/tmts//c                 "    t          | d          S )Nvar tvInfoJs=)r   )ss    r   <lambda>z&IqiyiIE.get_raw_data.<locals>.<lambda>w   s    a1Q1Q r!   )transform_sourcequeryheaders)inttimer    str_download_jsongeo_verification_headers)selfrG   video_idtmkeyrJ   paramss          r   get_raw_datazIqiyiIE.get_raw_datah   s    t#$$0c"ggmd*++5
 
 ""BBBxBBB'Q'Q$"?"?"A"A # C C 	Cr!   c           
      ~   d}t          j        d|          }|sd S |                     d|d          }|                     d|dd          }t          t	          | j        |                    }t          j        d	          D ]}|                     d
| d| d| d|d| d|           }| 	                    t          |d          |          }	|	d         d         }
|
D ]0}|                    |                     |d                              1t          |
          |k     r n|                     |||          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/rL   zDownload playlist page z!Failed to download playlist page noteerrnoterN   datavlistvurl)refindall_search_regexlistmap
url_result	itertoolscount_download_webpage_parse_jsonr   appendlenplaylist_result)rY   webpage	PAGE_SIZElinksalbum_idalbum_titleentriespage_numpagelist_pagepagelistrg   items               r   _extract_playlistzIqiyiIE._extract_playlistz   s   	
`   	F%%#Wj: :(()7M ) P P s4?E2233 "** 	 	H 22[[[H[[y[[[9x99FHFF	 3 H HM
 '']O<<hH HHV$W-E > >ttF|<<====5zzI%% & ##GX{CCCr!   c                 Z   |                      |dd          }|                     d|dd           }|(|                     |          }|r|S t          d          |                     d|d	          }g }t	          d
          D ]}|                     ||          }|d         dk    r8|d         dk    r|                                  t          d|d         z             |d         }	|	d         D ]V}
d|
vrt          |
d                   }|                    |
d         |d| j	        
                    |d          dd           W|r n|                     d
|           t          d|          p4t          t          dd|                    p|                     d|d          }|||dS )Ntemp_idzdownload video page)rd   z6data-(?:player|shareplattrigger)-tvid\s*=\s*[\'"](\d+)rG   defaultzCan't find any videoz>data-(?:player|shareplattrigger)-videoid\s*=\s*[\'"]([a-f\d]+)rZ   r8   codeA00000A00111z!Unable to load data. Error code: rf   vidlm3utxvdr&   m3u8_native)r*   	format_idr(   qualityprotocolzwidget-videotitleclasszmod-play-titz<<span[^>]+data-videochanged-title="word"[^>]*>([^<]+)</span>r)   )r'   r)   formats)rq   rk   r   r   ranger^   raise_geo_restrictedrV   rs   _FORMATS_MAPget_sleepr   r   r   _html_search_regex)rY   r*   rv   rG   ru   rZ   r   _raw_datarf   streamr   r)   s                r   _real_extractzIqiyiIE._real_extract   s5   ((!6 ) 8 8 !!EwPV`d " f f<"44W==O '&& !8999%%MwXbd d q 	% 	%A((x88H8++F#x//--///$%H8TZK[%[\\\F#Dv, 
 
&((&&!'?!# #044R<< -         KK8$$$$"#6@@ 7QXYYZZ++,kmtv}~~ 	
 
 
 	
r!   N)__name__
__module____qualname__IE_NAMEIE_DESC
_VALID_URL_TESTSr   r^   r   r    r!   r   r#   r#   "   sz       GGMJ 8 5E
 
  814 s	
 
 *
 
 8  8  04I
 
  84&
 

 *
 
 8-
 
   5 a3Fl 	 	LC C C$D D DB6
 6
 6
 6
 6
r!   r#   c                       e Zd ZdZdZdZdddddd	d
ddddddedddidgddddgZdddddddd d!Zd"d#d$d%d&d'd(d)d*d+d,d-d.Z	d/Z
d0 Zd1 Zd2 Zd6d4Zd5 Zd3S )7IqIEziq.comzInternational version of iQiyiz8https?://(?:www\.)?iq\.com/play/(?:[\w%-]*-)?(?P<id>\w+)z:https://www.iq.com/play/one-piece-episode-1000-1ma1i6ferf4 2d7caf6eeca8a32b407094b33b757d39r&   1ma1i6ferf4u   航海王 第1000集,   Subtitle available on Sunday 4PM（GMT+8）.i  iKa20211121rD   zEpisode 1000	One Piece   )r(   r'   r)   descriptionduration	timestampupload_dateepisode_numberepisodeseries	age_limitaverage_ratingformat500format is restricted)r*   r   r+   r]   expected_warningsz:https://www.iq.com/play/mermaid-in-the-fog-2021-gbdpx13bs4Tr/   240P360P480P720P1080P1080P502K4K)100200300r   600610700800zh_CNzh_TWenkojathmyvir'   esptar)r<   r=   3r?   rA   rB   r>   2324262728a  
        console.log(page.evaluate(function() {
            var tvid = "%(tvid)s"; var vid = "%(vid)s"; var src = "%(src)s";
            var uid = "%(uid)s"; var dfp = "%(dfp)s"; var mode = "%(mode)s"; var lang = "%(lang)s";
            var bid_list = %(bid_list)s; var ut_list = %(ut_list)s; var tm = new Date().getTime();
            var cmd5x_func = %(cmd5x_func)s; var cmd5x_exporter = {}; cmd5x_func({}, cmd5x_exporter, {}); var cmd5x = cmd5x_exporter.cmd5x;
            var authKey = cmd5x(cmd5x('') + tm + '' + tvid);
            var k_uid = Array.apply(null, Array(32)).map(function() {return Math.floor(Math.random() * 15).toString(16)}).join('');
            var dash_paths = {};
            bid_list.forEach(function(bid) {
                var query = {
                    'tvid': tvid,
                    'bid': bid,
                    'ds': 1,
                    'vid': vid,
                    'src': src,
                    'vt': 0,
                    'rs': 1,
                    'uid': uid,
                    'ori': 'pcw',
                    'ps': 1,
                    'k_uid': k_uid,
                    'pt': 0,
                    'd': 0,
                    's': '',
                    'lid': '',
                    'slid': 0,
                    'cf': '',
                    'ct': '',
                    'authKey': authKey,
                    'k_tag': 1,
                    'ost': 0,
                    'ppt': 0,
                    'dfp': dfp,
                    'prio': JSON.stringify({
                        'ff': 'f4v',
                        'code': 2
                    }),
                    'k_err_retries': 0,
                    'up': '',
                    'su': 2,
                    'applang': lang,
                    'sver': 2,
                    'X-USER-MODE': mode,
                    'qd_v': 2,
                    'tm': tm,
                    'qdy': 'a',
                    'qds': 0,
                    'k_ft1': '143486267424900',
                    'k_ft4': '1572868',
                    'k_ft7': '4',
                    'k_ft5': '1',
                    'bop': JSON.stringify({
                        'version': '10.0',
                        'dfp': dfp
                    }),
                };
                var enc_params = [];
                for (var prop in query) {
                    enc_params.push(encodeURIComponent(prop) + '=' + encodeURIComponent(query[prop]));
                }
                ut_list.forEach(function(ut) {
                    enc_params.push('ut=' + ut);
                })
                var dash_path = '/dash?' + enc_params.join('&'); dash_path += '&vf=' + cmd5x(dash_path);
                dash_paths[bid] = dash_path;
            });
            return JSON.stringify(dash_paths);
        }));
        saveAndExit();
    c           
      b   | j                             dd          }|r|S |                     |                     d|d                    }|                     ||dd          }|                     d|d	|d
dt                    }|                     d|d|ddt          d          pi }t          |          D ]j}|                    |          p|}	|                     d|	 d||          d|d| ddd          pd}
d|
v r | j         	                    dd|
           |
c S kt          d          )Niq	player_jszT<script src="((?:https?:)?//stc\.iqiyipic\.com/_next/static/chunks/webpack-\w+\.js)"zwebpack URLzDownloading webpack JSzUnable to download webpack JSrc   z["\']\s*\+\s*zJS locationsz.{\s*(?:\d+\s*:\s*["\'][\da-f]+["\']\s*,?\s*)+}z\[\w+\]\+["\']\.js)contains_patternend_patternrQ   z["\']\s*\+\(\s*zreplacement mapz-{\s*(?:\d+\s*:\s*["\'][\w.-]+["\']\s*,?\s*)+}z\[\w+\]\|\|\w+\)\+["\']\.F)r   r   rQ   rb   z-https://stc.iqiyipic.com/_next/static/chunks/.z.jszDownloading #z
 module JSzUnable to download module JSrd   re   rb    zvms requestzUnable to extract player JS)cacheload_proto_relative_urlrk   rq   _search_jsonr   reversedr   storer   )rY   rv   rZ   player_js_cachewebpack_js_url
webpack_jswebpack_mapreplacement_mapmodule_indexreal_module	module_jss              r   _extract_vms_player_jszIqIE._extract_vms_player_jsS  s   *//$<< 	#""11$2D2Dceln{3} 3} ~ ~++NHKc  nM+  N  N
''j.(N-
 ( L L
 ++
,=xM4z	 ,    	 	 %[11 	! 	!L)--l;;K|K..lllkZfNglllG|GGGQow| / ~ ~ D BD  	))
  {I>>>     * :;;;r!   c                 X    |                      d|                     ||          d          S )Nz<,\s*(function\s*\([^\)]*\)\s*{\s*var _qda.+_qdc\(\)\s*})\s*,zsignature function)rk   r   )rY   rv   rZ   s      r   _extract_cmd5x_functionzIqIE._extract_cmd5x_functionp  s6    !!"a"&"="=gx"P"PRfh h 	hr!   c           
                                 d                     ||          d|dddt                    sd S  fdD              _        d S )Nz:function\s*\([^)]*\)\s*\{\s*"use strict";?\s*var \w\s*=\s*z
video tagsz"{\s*\d+\s*:\s*\{\s*nbid\s*:.+}\s*}z\s*,\s*\w\s*=\s*\{\s*getNewVdF)r   r   rb   rQ   c                 v    i | ]5}|t          |d ft          j                            |                    6S )valueexpected_typer   )r   rV   	_BID_TAGSr   ).0bidextracted_bid_tagsrY   s     r   
<dictcomp>z)IqIE._update_bid_tags.<locals>.<dictcomp>|  sU     
 
 
 03.PS]a]k]o]ops]t]tuuu
 
 
r!   )r   r   r   r   )rY   rv   rZ   r   s   `  @r   _update_bid_tagszIqIE._update_bid_tagst  s    !..I''::L(B8Xb	 / d d
 " 	F
 
 
 
 
)
 
 
r!   Nc                 h    |                      d                              |          }|r|j        n|S )Nzhttps://iq.com/)_get_cookiesr   r   )rY   namer   cookies       r   _get_cookiezIqIE._get_cookie  s5    ""#45599$??%2v||72r!   c                    |                      |          }|                     ||          }|                     ||           |                     ||          d         }|d         d         }|d         }t	          |                     |                     dd          |t          j        j	        d          d	d
          }|ru| 
                    d|dddd|                     dd          |                     dd          |                     dd          dd          }t	          |dt                    }	ndg}	|                     t          | d                              |dd|| j        |d          |d!         t	          |d"t          d#$          ||                     d%d          |                     dd          |                     dd          d&d'                    dg| j                                                  z   d(z   d&d'                    |	          z   d(z   |                     ||          d)
z  *          d                                         |          }
g i }}| 
                    t+          d+|
d                   |d,d-.          d/         t	          d0t,          d1          }t	          d2t.                    r7|                     d3                    t5          |d d4                               t7          t	          d5t                              D ]l|
                              }|s|                     d6 d7           4t	          | 
                    t+          d+|          |d8| j                  d9d:          d/t8                    }t	          |d;d<fd=ft8          d1          pi }g }|                    d>          rT|                    |                     t+          |                    d?d@          |d>                   dAdB                     |                    dC          rS|                    |                     t+          |                    d?d@          |dC                   dD                     |                    dE          r|                    dFdG          }|dGk    r8|                      |dE         dAdH          \  }}|                    |           n|dIk    r{t	          |                     |dE         |dJ          dKt                    }|s| !                    ||                    d?d@                    \  }}|                    |           n|                     | dL           |s]|                    dM          r$|                     | j                  dN           n$|                     dO| j                  dP           |D ]}|"                     tG          tI          | j                                                                      | j                 dQtK          |                    dR                               |                    |           nt	          dSt8                    D ]| j&                            t                              dT                                        dU                    }|'                    |g                               fdVdWD                        |                    dX          r*|                    dY          r|                    dY          n|}||dZ         |||                    d[          tQ          |                    d\                    tS          |                    d]                    t	          |d^t,                    tU          |                    d_                    t	          |d`t                    t	          |dat                    t/          |                    db                    pd |                    dc          ddS )eNpropsinitialStateplaycurVideoInfoI00002z{}F)rQ   rb   )rf   uidr   r   z https://pcw-api.iq.com/api/vtypezDownloading VIP datazUnable to download VIP datar   r6   modintllangen_usQC005r   )batch
platformIdmodeCodelangCodedeviceId)rd   re   rR   rb   )rf   all_vip.vipType)r   0i )timeoutz9Executing signature code (this may take a couple minutes)z<!DOCTYPE html>tvIdrH   )initialProps	pagePropsptid04022001010011000000r   dfp[,])
rG   rH   rI   r  r  moder  bid_listut_list
cmd5x_func)note2htmlrZ   jscodezhttps://cache-video.iq.comz%Downloading initial video format infoz,Unable to download initial video format inforc   rf   )boss_ts)Nrf   )previewTimertime)r   get_all)r'  rf   prvzThis preview video is limited{}z to %s seconds)programvideo.r   zUnknown format id: z%. It is currently not being extractedzDownloading format data for zUnable to download format datar   r,  r-  c                 6    t          |d                   k    S )Nr   )rV   )r   vr   s     r   rP   z$IqIE._real_extract.<locals>.<lambda>  s    WZ[\]b[cWdWdhkWk r!   m3u8Urldm3u8zhttps://cache-m.iq.com/dc/dt/r&   )m3u8_idrb   mpdUrl)mpd_idrb   m3u8ffts)r(   r2  rb   m4sra   )payload.rf   z$ formats are currently not supportedrO   z format is restrictedzUnable to extract z format)r   format_notescrsz)r,  stl.lid_namec           	          g | ]G\  }}                     |          |t                               d d          |                   dHS )dstlzhttp://meta.video.iqiyi.com)r(   r*   )r   r   )r   
format_key
format_extinitial_format_data
sub_formats      r   
<listcomp>z&IqIE._real_extract.<locals>.<listcomp>  s{     3o 3o 3o )*jS]SaSablSmSm3o!266v?\]]_ijt_uvv4 4 3o 3o 3or!   ))srtrF  )webvttvttalbumId	albumInfor   	mergeDescrt   rating)playScoreInfoscoreisoUploadDate)videoTagMap..r   )actorArr.r   order	albumName)r'   r)   r   	subtitlesr   r   r   r   r   
categoriescastr   r   )+	_match_idrq   r   _search_nextjs_datar   rr   r  urllibparseunquoterW   r   r   r   _DASH_JSrV   joinr   keysr   stripr   r	   r   report_warningr   r
   setdictextend_extract_m3u8_formats_extract_mpd_formats!_parse_m3u8_formats_and_subtitles _parse_mpd_formats_and_subtitlesupdater   rl   r   	_LID_TAGS
setdefaultr   r   r   )rY   r*   rZ   rv   
next_props	page_data
video_infor  vip_datar"  
dash_pathsr   rT  preview_time	dash_pathformat_datavideo_formatextracted_formatsr6  m3u8_formatsr   mpd_datampd_formatsfr  extra_metadatar   rC  rD  s                             @@@r   r   zIqIE._real_extract  sl	   >>#&&((h77gx000--gx@@I
~.v6	~.
  400(V\Main  p pQ( ( (
  	**2HCY  dA"# $ 0 0 ? ? $ 0 0 A A $ 0 0" = =I I  +    H #8-P`klllGGeG %%&6tW&M&M&M&Q&QR"Xdm"6*!%(#J0U25?UW W W''r22((77((99#((C+H$.2E2E2G2G+H"I"IICO'!2!22S8"::7HMMO O ? 'R ' ' ' %''8% %
   "110*S/BBH8Bp 2 r rrxz $!Vfs  ~CD D D+-GWbccc 	~ A H HVbdhjzI{I{ | |}}} |$79Yituuuvv 2	. 2	.C"s++I ##$d#$d$d$deee&t':':4i@@(IDN34GIISs (; ( ( %D: : :K
 (iJkJkJkJk5l6:EK K K QNP  "	** 6!(()C)CKOOG5TUUWcdmWnoo3e *D *5 *5 6 6 6 )) .!(()B)BKOOG5TUUWcdlWmnne *C *- *- . . . '' U!%%dD11::&*&L&L$V,%E 'M 'S 'SOL!%,,\::::5[[+((f)=xu(UUWo  @C D  D  DH# ! %)%J%J #{w@_'`'`&b &bNK%,,[9999''2(S(S(STTT$ [##C(( [''4>#+>(U(U(UVVVV''(YT^C=P(Y(Y(YZZZ&  Eydn.A.A.C.C)D)DEEcJJ#'>##6  '|'7'7'@'@AA    
 NN,----&':<Scghhh 	p 	pJ>%%k*..2G2G&H&H*..Y`JaJabbD  r**11 3o 3o 3o 3o 3o -P3o 3o 3o p p p p
 8B~~i7P7PU^UbUbcnUoUo{333u'"%>>+66&z~~e'<'<==()A)ABB*96P`mnnn&z~~o'F'FGG&~7Xhklll 1JZ]^^^)*..*A*ABBJd nn[11
 
 	
r!   r   )r   r   r   r   r   r   floatr   r   ri  r\  r   r   r   r  r   r   r!   r   r   r      sH       G.GLJK1+I#%"%!#
 
 e
 55) . L +F6 	 	I  IFHP< < <:h h h
 
 
3 3 3 3A
 A
 A
 A
 A
r!   r   c                   b    e Zd ZdZdZddddddd	d
ddddddddg ddeddgdgZddZd ZdS )	IqAlbumIEziq.com:albumz9https?://(?:www\.)?iq\.com/album/(?:[\w%-]*-)?(?P<id>\w+)z3https://www.iq.com/album/one-piece-1999-1bk9icvr3311bk9icvr331r   r   )r'   r)   r      )r*   r+   playlist_mincountu6   https://www.iq.com/album/九龙城寨-2021-22yjnij099kr&   22yjnij099ku   九龙城寨z$md5:8a09f50b8ba0db4dc69bc7c844228044i  iKa20220111)zShi Yan NengzYu Langz	Peter  lvz
Sun Zi JunzYang Xiao Bor   )r(   r'   r)   r   r   r   r   r   rV  r   r   r   )r*   r+   r   Nr
  r  c              #     K   |D ]}|                      d| |d|                    dd           dd|||d         |d         d	
          }|d         d         D ]w}|                     d|                    d          p|d         z  t                                          |                    d          |                    d                    V  xd S )Nz-https://pcw-api.iq.com/api/episodeListSource/z Downloading video list episodes msgr   zUnable to download video listr6   tofrom)r  r  r  endOrder
startOrder)rd   re   rR   rf   epgzhttps://www.iq.com/play/%splayLocSuffix	qipuIdStrr   )rW   r   rn   r   ie_key)	rY   album_id_numpage_rangesry   	mode_code	lang_code
page_rangepager-  s	            r   _entrieszIqAlbumIE._entries'  s"     % 	` 	`J&&NNNPXS
ub8Q8QSS7"# ) ) *4 0",V"4@ @ ' 	 	D fe, ` `oo&BeiiP_F`F`Fvdijudv&w&*kkmmUYY{5K5KUYYW]M^M^` ` ` ` ` ``	` 	`r!   c                 D   |                      |          }|                     ||          }|                     ||          }|d         d         d         d         }|                    d          dk    r0|                     d| t
                                                    S |                     |                     |d         |d	         |t          |d
          t          |d                    ||                    d          |                    d                    S )Nr  r  albumvideoAlbumInfo	videoTypesingleVideozhttps://www.iq.com/play/rI  totalPageRange)r  r  r  r  )r  r  r  r  r   desc)
rW  rq   rX  r   rn   r   r  ru   r  r   )rY   r*   ry   rv   	next_data
album_datas         r   r   zIqAlbumIE._real_extract7  s   >>#&&((h77,,Wh??	w'7@AQR
>>+&&-77??#Hh#H#H$++--XXX##MM*Y/<L1Mx&y2dee&y2deeg g jnnV,,jnnV.D.D	F F 	Fr!   )Nr
  r  )	r   r   r   r   r   rz  r   r  r   r   r!   r   r|  r|  	  s        GMJD I
 

 !  H#A#%$ZZZ#
 
 55! F6` ` ` ` F F F F Fr!   r|  ) r   ro   ri   rU   urllib.parserY  commonr   openloadr   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r#   r   r|  r   r!   r   <module>r     s        				      ! ! ! ! ! ! & & & & & &                                     *2 2 2o
 o
 o
 o
 o
m o
 o
 o
dr
 r
 r
 r
 r
= r
 r
 r
j	:F :F :F :F :F :F :F :F :F :Fr!   