
    i}`                         S SK r S SKrS SKrS SKrS SKrSSKJr  SSKJ	r	  SSK
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  S r " S S	\5      r " S
 S\5      r " S S\5      rg)    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                 f    [         R                  " U R                  5       5      R                  5       $ N)hashlibmd5encode	hexdigest)texts    C/app/mltbenv/lib/python3.13/site-packages/yt_dlp/extractor/iqiyi.pymd5_textr       s     ;;t{{}%//11    c            
           \ rS rSrSrSrSrSSSSS	.S
.SSSSSS	.SS.SSS.SSS.SSSSS	.S
.SSSSS	.SS.SSSS.S S!.S"SS./rS#S$S%S&S'S'S(S)S*.rS+ r	S, r
S- rS.rg/)0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                     [        [        R                  " 5       S-  5      nSn[        [        U5      U-   U-   5      nUUSUUS.nU R	                  SU SU S3US X`R                  5       S9$ )	N   d5fb4bd9d50c4be6948c97edd7254b0e 76f90cbd92f94a2e925d83e8ccd22cb7)tvidvidsrcsctz!http://cache.m.iqiyi.com/jp/tmts//c                     [        U S5      $ )Nvar tvInfoJs=)r   )ss    r   <lambda>&IqiyiIE.get_raw_data.<locals>.<lambda>w   s    a1Qr!   )transform_sourcequeryheaders)inttimer    str_download_jsongeo_verification_headers)selfrH   video_idtmkeyrK   paramss          r   get_raw_dataIqiyiIE.get_raw_datah   s    t#$0c"gmd*+5
 ""/vQxjB'Q"?"?"A # C 	Cr!   c           
      0   Sn[         R                  " SU5      nU(       d  g U R                  SUS5      nU R                  SUSSS9n[        [	        U R
                  U5      5      n[        R                  " S	5       H  nU R                  S
U SU SU S3USU 3SU 3S9nU R                  [        US5      U5      n	U	S   S   n
U
 H&  nUR                  U R                  US   5      5        M(     [        U
5      U:  d  M    O   U R                  XdU5      $ )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/rM   zDownload playlist page z!Failed to download playlist page noteerrnoterO   datavlistvurl)refindall_search_regexlistmap
url_result	itertoolscount_download_webpage_parse_jsonr   appendlenplaylist_result)r[   webpage	PAGE_SIZElinksalbum_idalbum_titleentriespage_numpagelist_pagepagelistrj   items               r   _extract_playlistIqiyiIE._extract_playlistz   s@   	

` %%#Wj:(()7M ) P s4??E23 "*H 228
!H:QykYZ[.xj9;H:F	 3 HM
 '']O<hHHV$W-EttF|<= 5zI% + ##G{CCr!   c                    U R                  USSS9nU R                  SUSS S9nUc%  U R                  U5      nU(       a  U$ [        S5      eU R                  SUS	5      n/ n[	        S
5       H  nU R                  X55      nUS   S:w  a*  US   S:X  a  U R                  5         [        SUS   -   5      eUS   n	U	S    HM  n
SU
;  a  M  [        U
S   5      nUR                  U
S   USU R                  R                  US5      SS.5        MO     U(       a    OU R                  S
U5        M     [        SU5      =(       d0    [        [        SSU5      5      =(       d    U R                  SUS5      nUUUS.$ )Ntemp_idzdownload video page)rg   z6data-(?:player|shareplattrigger)-tvid\s*=\s*[\'"](\d+)rH   defaultzCan't find any videoz>data-(?:player|shareplattrigger)-videoid\s*=\s*[\'"]([a-f\d]+)r\   r9   codeA00000A00111z!Unable to load data. Error code: ri   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)rt   rn   r   r   ranger`   raise_geo_restrictedrX   rv   _FORMATS_MAPget_sleepr   r   r   _html_search_regex)r[   r+   ry   rH   rx   r\   r   _raw_datari   streamr   r*   s                r   _real_extractIqiyiIE._real_extract   s   ((!6 ) 8 !!EwPV`d " f<"44W=O&& !899%%MwXbd qA((8H8+F#x/--/$%H8TZK[%[\\F#Dv,&(&!'?!# #0044R< -  	 ' KK8$3 6 ##6@ 7QXYZ++,kmtv}~ 	
 
 	
r!    N)__name__
__module____qualname____firstlineno__IE_NAMEIE_DESC
_VALID_URL_TESTSr   r`   r   r   __static_attributes__r   r!   r   r#   r#   "   s    GGMJ 8 5E
 814 s	
 *
 8 8 04I
 84&

 *
 8-
  5a3Fl 	LC$DB6
r!   r#   c                       \ rS rSrSrSrSrSSSSS	S
SSSSSSS\S.SS0S/S.SSS./rSSSSSSS S!S".r	S#S$S%S&S'S(S)S*S+S,S-S.S/.r
S0rS1 rS2 rS3 rS8S5 jrS6 rS7rg4)9IqIE   z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20211121rE   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-gbdpx13bs4Tr0   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@   rB   rC   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                 8   U R                   R                  SS5      nU(       a  U$ U R                  U R                  SUS5      5      nU R	                  XBSSS9nU R                  SUS	US
S[        S9nU R                  SUSUSS[        SS9=(       d    0 n[        U5       Hm  nUR                  U5      =(       d    Un	U R	                  SU	 SXh    S3USU S3SSS9=(       d    Sn
SU
;   d  MN  U R                   R                  SSU
5        U
s  $    [        S5      e)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 JSrf   z["\']\s*\+\s*zJS locationsz.{\s*(?:\d+\s*:\s*["\'][\da-f]+["\']\s*,?\s*)+}z\[\w+\]\+["\']\.js)contains_patternend_patternrS   z["\']\s*\+\(\s*zreplacement mapz-{\s*(?:\d+\s*:\s*["\'][\w.-]+["\']\s*,?\s*)+}z\[\w+\]\|\|\w+\)\+["\']\.F)r   r   rS   re   z-https://stc.iqiyipic.com/_next/static/chunks/.z.jszDownloading #z
 module JSzUnable to download module JSrg   rh   re    zvms requestzUnable to extract player JS)cacheload_proto_relative_urlrn   rt   _search_jsonr   reversedr   storer   )r[   ry   r\   player_js_cachewebpack_js_url
webpack_jswebpack_mapreplacement_mapmodule_indexreal_module	module_jss              r   _extract_vms_player_jsIqIE._extract_vms_player_jsS  sr   **//$<""11$2D2Dceln{3} ~++NKc  nM+  N
''j.(N-
 ( L
 ++
,=xM4z	 ,   	 	 %[1L)--l;K|K..?}AkNgMhhkl|nJGQow| / ~ D BD  	)

  {I>   2 :;;r!   c                 F    U R                  SU R                  X5      S5      $ )Nz<,\s*(function\s*\([^\)]*\)\s*{\s*var _qda.+_qdc\(\)\s*})\s*,zsignature function)rn   r   )r[   ry   r\   s      r   _extract_cmd5x_functionIqIE._extract_cmd5x_functionp  s+    !!"a"&"="=g"PRfh 	hr!   c                     U R                  SU R                  X5      SUSSS[        S9nU(       d  g U Vs0 s H.  nU[        X4S4[        U R
                  R                  U5      S9_M0     snU l        g s  snf )	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   re   rS   valueexpected_typer   )r   r   r   r   rX   	_BID_TAGSr   )r[   ry   r\   extracted_bid_tagsbids        r   _update_bid_tagsIqIE._update_bid_tagst  s    !..I'':L(B8Xb	 / d
 " *
) 0.PS]a]k]k]o]ops]tuu)
 
s   5A4Nc                 l    U R                  S5      R                  U5      nU(       a  UR                  $ U$ )Nzhttps://iq.com/)_get_cookiesr   r   )r[   namer   cookies       r   _get_cookieIqIE._get_cookie  s/    ""#4599$?%v||272r!   c                 p  ^ U R                  U5      nU R                  X5      nU R                  X25        U R                  X25      S   nUS   S   nUS   n[	        U R                  U R                  SS5      U[        R                  R                  SS9S	S
S9nU(       aZ  U R                  SUSSSSU R                  SS5      U R                  SS5      U R                  SS5      S.SS9n[	        US[        S9n	OS/n	U R                  [        U SS9R                  USSX R                  US    US!   [	        US"[        S#S$9UU R                  S%S5      U R                  SS5      U R                  SS5      S&S'R!                  S/U R"                  R%                  5       Q5      -   S(-   S&S'R!                  U	5      -   S(-   U R'                  X25      S).
-  S*9S   R)                  5       U5      n
/ 0 pU R                  [+        S+U
S   5      US,S-S.9S/   n[	        US0[,        SS19n[	        US2[.        S9(       a+  U R1                  S3R3                  [5        US S45      5      5        [7        [	        US5[        S95       GH  mU
R                  T5      nU(       d  U R1                  S6T S735        M3  [	        U R                  [+        S+U5      US8U R"                  T    3S9SS:9S/[8        S9n[	        US;S<U4S= j4[8        SS19=(       d    0 n/ nUR                  S>5      (       a>  UR;                  U R=                  [+        UR                  S?S@5      US>   5      SATSSB95        UR                  SC5      (       a=  UR;                  U R?                  [+        UR                  S?S@5      USC   5      TSSD95        UR                  SE5      (       a  UR                  SFSG5      nUSG:X  a*  U RA                  USE   SATSSH9u  nnUR;                  U5        O}USI:X  ac  [	        U R                  USE   USSJ9SK[        S9nU(       d  GM  U RC                  UTUR                  S?S@5      5      u  nnUR;                  U5        OU R1                  U SL35        U(       dZ  UR                  SM5      (       a"  U R1                  U R"                  T    SN35        O"U R1                  SOU R"                  T    SP35        U Hn  nURE                  [G        [I        U R"                  R%                  5       5      5      " T5      U R"                  T   SQ.[K        UR                  SR5      5      E5        Mp     UR;                  U5        GM     [	        USS[8        S9 H  nU RL                  R                  [        UR                  ST5      5      UR                  SU5      5      nURO                  U/ 5      R;                  SV VVs/ s H@  u  nnUR                  U5      (       d  M  U[+        UR                  SWSX5      UU   5      SY.PMB     snn5        M     UR                  SZ5      (       a'  UR                  S[5      (       a  UR                  S[5      OUnUUS\   UUUR                  S]5      [Q        UR                  S^5      5      [S        UR                  S_5      5      [	        US`[,        S9[U        UR                  Sa5      5      [	        USb[        S9[	        USc[        S9[/        UR                  Sd5      5      =(       d    S UR                  Se5      Sf.$ s  snnf )gNpropsinitialStateplaycurVideoInfoI00002z{}F)rS   re   )ri   uidr   r   z https://pcw-api.iq.com/api/vtypezDownloading VIP datazUnable to download VIP datar   r7   modintllangen_usQC005r   )batch
platformIdmodeCodelangCodedeviceId)rg   rh   rT   re   )ri   all_vip.vipType)r   0i )timeoutz9Executing signature code (this may take a couple minutes)z<!DOCTYPE html>tvIdrI   )initialProps	pagePropsptid04022001010011000000r   dfp[,])
rH   rI   rJ   r  r%  moder  bid_listut_list
cmd5x_func)note2htmlr\   jscodezhttps://cache-video.iq.comz%Downloading initial video format infoz,Unable to download initial video format inforf   ri   )boss_ts)Nri   )previewTimertime)r   get_all)r0  ri   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   r5  r6  c                 &   > [        US   5      T:H  $ )Nr  )rX   )r   vr  s     r   rQ   $IqIE._real_extract.<locals>.<lambda>  s    WZ[\]b[cWdhkWkr!   m3u8Urldm3u8zhttps://cache-m.iq.com/dc/dt/r'   )m3u8_idre   mpdUrl)mpd_idre   m3u8ffts)r)   r<  re   m4srd   )payload.ri   z$ formats are currently not supportedrP   z format is restrictedzUnable to extract z format)r   format_notescrsz)r5  stl.lid_name))srtrI  )webvttvttdstlzhttp://meta.video.iqiyi.com)r)   r+   albumId	albumInfor  	mergeDescrw   rating)playScoreInfoscoreisoUploadDate)videoTagMap..r  )actorArr.r  order	albumName)r(   r*   r   	subtitlesr   r   r   r   r   
categoriescastr   r   )+	_match_idrt   r  _search_nextjs_datar   ru   r	  urllibparseunquoterY   r   r   r   _DASH_JSrX   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   ro   r   	_LID_TAGS
setdefaultr   r   r   )r[   r+   r\   ry   
next_props	page_data
video_infor  vip_datar+  
dash_pathsr   rX  initial_format_datapreview_time	dash_pathformat_datavideo_formatextracted_formatsr@  m3u8_formatsr   mpd_datampd_formatsf
sub_formatr  
format_key
format_extextra_metadatar  s                                 @r   r   IqIE._real_extract  s   >>#&((7g0--g@I
~.v6	~.
  40(V\\MaMain  pQ(
 **2HCY  dA"# $ 0 0 ? $ 0 0 A $ 0 0" =I  +  H #8-P`klGeG %%&6tW&M&Q&QR"Xmm"6*!%(#J0U25?UW''r2((7((9#((C+H$..2E2E2G+H"IICO'!22S8"::7MO ? 'R ' ' %'8%
   "110*S/BH8Bp 2 rrxz $!Vfs  ~CD+-GWbc A H HVbdhjzI{ |} |$79YituvC"s+I##&9#>c$de&t':':4i@(3DNN34G3HISs (; ( %D:K
 (iJk5l6:EK QNP  "	**!(()C)CKOOG5TUWcdmWno3e *D *5 6 ))!(()B)BKOOG5TUWcdlWmne *C *- . ''!%%dD1:&*&L&L$V,%E 'M 'SOL!%,,\:5[+((f)=xu(UWo  @C DH# %)%J%J #{w@_'`&bNK%,,[9''2$.R(ST$##C((''4>>#+>*??T(UV''*<T^^C=P<QQX(YZ&(dnn.A.A.C)DEcJ#'>>##6 '|'7'7'@A  ' NN,-e wh '':<ScghJ>>%%k*..2G&H*..Y`JabD  r*11 -P3o -P(*jS]SaSablSm4!266v?\]_ijt_uv4 -P3o p i 8B~~i7P7PU^UbUbcnUoUo{3u'"%>>+6&z~~e'<=()AB*96P`mn&z~~o'FG&~7Xhkl 1JZ]^)*..*ABJd nn[1
 	
3os   \2 &\2)r   r   )r   r   r   r   r   r   r   floatr   r   rm  r`  r   r   r  r	  r   r   r   r!   r   r   r      s    G.GLJK1+I#%"%!#
 e
 55). L+F6 	I IFHP<:h
3A
r!   r   c                   j    \ rS rSrSrSrSSSSS.S	S
.SSSSSSSSS/ SQS\S.S/S./rSS jrS r	Sr
g)	IqAlbumIEi	  z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   rZ  r   r   r   )r+   r,   r   Nc              #   n  #    U H  nU R                  SU 3USUR                  SS5       3SSUUUS   US   S	.S
9nUS   S    Hg  nU R                  SUR                  S5      =(       d    US   -  [        R	                  5       UR                  S5      UR                  S5      5      v   Mi     M     g 7f)Nz-https://pcw-api.iq.com/api/episodeListSource/z Downloading video list episodes msgr   zUnable to download video listr7   tofrom)r  r  r  endOrder
startOrder)rg   rh   rT   ri   epgzhttps://www.iq.com/play/%splayLocSuffix	qipuIdStrr  )rY   r   rq   r   ie_key)	r[   album_id_numpage_rangesr|   	mode_code	lang_code
page_rangepager6  s	            r   _entriesIqAlbumIE._entries'  s     %J&&?~NPX7
ub8Q7RS7"# ) ) *4 0",V"4@ ' 	D fe,oo&BeiiP_F`Fvdijudv&w&*kkmUYY{5KUYYW]M^` ` - &s   B3B5c                    U R                  U5      nU R                  X5      nU R                  X25      nUS   S   S   S   nUR                  S5      S:X  a'  U R	                  SU 3[
        R                  5       5      $ U R                  U R                  US   US	   U[        US
5      [        US5      5      X%R                  S5      UR                  S5      5      $ )Nr  r  albumvideoAlbumInfo	videoTypesingleVideozhttps://www.iq.com/play/rM  totalPageRange)r  r!  r"  r  )r  r!  r"  r  r  desc)
r[  rt   r\  r   rq   r   r  rx   r  r   )r[   r+   r|   ry   	next_data
album_datas         r   r   IqAlbumIE._real_extract7  s    >>#&((7,,W?	w'7@AQR
>>+&-7??%=hZ#H$++-XX##MM*Y/<L1Mx&y2de&y2deg nnV,jnnV.D	F 	Fr!   r   )Nr  r  )r   r   r   r   r   r   r  r   r  r   r   r   r!   r   r  r  	  ss    GMJD I

 ! H#A#%$Z#
 55!F6` Fr!   r  ) r   rr   rl   rW   urllib.parser]  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     sd      	   ! &    *2o
m o
dr
= r
j	:F :Fr!   