
    =Ґ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y)    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                 d    t        j                  | j                               j                         S N)hashlibmd5encode	hexdigest)texts    O/var/www/descvideos/venv/lib/python3.12/site-packages/yt_dlp/extractor/iqiyi.pymd5_textr       s     ;;t{{}%//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
y-).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}| j	                  d| d| d|d || j                               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1Q 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"gmd*+5
 ""/vQxjB'Q$"?"?"A # C 	Cr!   c           
      &   d}t        j                  d|      }|sy | j                  d|d      }| j                  d|dd      }t        t	        | j
                  |            }t        j                  d	      D ]  }| j                  d
| d| d| d|d| d|       }| j                  t        |d      |      }	|	d   d   }
|
D ]%  }|j                  | j                  |d                ' t        |
      |k  s n | 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/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   sL   	

` %%#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%	 ##GX{CCr!   c                    | j                  |dd      }| j                  d|dd       }| | j                  |      }|r|S t        d      | j                  d|d	      }g }t	        d
      D ]  }| j                  ||      }|d   dk7  r)|d   dk(  r| j                          t        d|d   z         |d   }	|	d   D ]I  }
d|
vrt        |
d         }|j                  |
d   |d| j                  j                  |d      dd       K |r n| j                  d
|        t        d|      xs+ t        t        dd|            xs | j                  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   s   ((!6 ) 8 !!EwPV`d " f<"44W=O&& !899%%MwXbd q 	%A((x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__IE_NAMEIE_DESC
_VALID_URL_TESTSr   r^   r   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                       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y3)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           
      $   | j                   j                  dd      }|r|S | j                  | j                  d|d            }| j	                  ||dd      }| j                  d|d	|d
dt              }| j                  d|d|ddt        d      xs i }t        |      D ]d  }|j                  |      xs |}	| j	                  d|	 d||    d|d| ddd      xs d}
d|
v sE| j                   j                  dd|
       |
c S  t        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} ~++NHKc  nM+  N
''j.(N-
 ( L
 ++
,=xM4z	 ,   	 	 %[1 	!L)--l;K|K..?}AkZfNgMhhkl|nJGQow| / ~ D BD  	)

  {I>  	! :;;r!   c                 H    | j                  d| j                  ||      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  s-    !!"a"&"="=gx"PRfh 	hr!   c                     | j                  d| j                  ||      d|dddt              }|sy |D ci c]1  }|t        ||dft        | j
                  j                  |            3 c}| _        y c c}w )	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   valueexpected_typer   )r   r   r   r   rV   	_BID_TAGSr   )rY   rv   rZ   extracted_bid_tagsbids        r   _update_bid_tagszIqIE._update_bid_tagst  s    !..I'':L(B8Xb	 / d
 " *
 03.PS]a]k]k]o]ops]tuu
 
s   6A4Nc                 b    | j                  d      j                  |      }|r|j                  S |S )Nzhttps://iq.com/)_get_cookiesr   r   )rY   namer   cookies       r   _get_cookiezIqIE._get_cookie  s/    ""#4599$?%v||272r!   c                 Z   | j                  |      }| j                  ||      }| j                  ||       | j                  ||      d   }|d   d   }|d   }t	        | j                  | j                  dd      |t        j                  j                  d      d	d
      }|r`| j                  d|dddd| j                  dd      | j                  dd      | j                  dd      dd      }t	        |dt              }	ndg}	| j                  t        | d      j                  |dd|| j                  |d    |d!   t	        |d"t        d#$      || j                  d%d      | j                  dd      | j                  dd      d&d'j!                  dg| j"                  j%                               z   d(z   d&d'j!                  |	      z   d(z   | j'                  ||      d)
z  *      d   j)                         |      }
g i }}| j                  t+        d+|
d         |d,d-.      d/   }t	        |d0t,        d1      }t	        |d2t.              r+| j1                  d3j3                  t5        |d d4                   t7        t	        |d5t                    D ]  |
j                        }|s| j1                  d6 d7       -t	        | j                  t+        d+|      |d8| j"                      d9d:      d/t8              }t	        |d;d<fd=ft8        d1      xs i }g }|j                  d>      rA|j;                  | j=                  t+        |j                  d?d@      |d>         dAdB             |j                  dC      r@|j;                  | j?                  t+        |j                  d?d@      |dC         dD             |j                  dE      r|j                  dFdG      }|dGk(  r-| jA                  |dE   dAdH      \  }}|j;                  |       n||dIk(  rct	        | j                  |dE   |dJ      dKt              }|s| jC                  ||j                  d?d@            \  }}|j;                  |       n| j1                  | dL       |sU|j                  dM      r"| j1                  | j"                      dN       n"| j1                  dO| j"                      dP       |D ]m  }|jE                   tG        tI        | j"                  j%                                           | j"                     dQtK        |j                  dR                   o |j;                  |        t	        |dSt8              D ]  }| jL                  j                  t        |j                  dT            |j                  dU            }|jO                  |g       j;                  dVD cg c]8  \  }}|j                  |      r"|t+        |j                  dWdX      ||         dY: c}}        |j                  dZ      r"|j                  d[      r|j                  d[      n|}||d\   |||j                  d]      tQ        |j                  d^            tS        |j                  d_            t	        |d`t,              tU        |j                  da            t	        |dbt              t	        |dct              t/        |j                  dd            xs d |j                  de      dfS c c}}w )gN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                 &    t        |d         k(  S )Nr   )rV   )r   vr   s     r   rP   z$IqIE._real_extract.<locals>.<lambda>  s    WZ[\]b[cWdhkWk r!   m3u8Urldm3u8zhttps://cache-m.iq.com/dc/dt/r&   )m3u8_idrb   mpdUrl)mpd_idrb   m3u8ffts)r(   r/  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_name))srtr<  )webvttvttdstlzhttp://meta.video.iqiyi.com)r(   r*   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   rK  initial_format_datapreview_time	dash_pathformat_datavideo_formatextracted_formatsr3  m3u8_formatsr   mpd_datampd_formatsf
sub_formatr  
format_key
format_extextra_metadatar   s                                 @r   r   zIqIE._real_extract  s   >>#&((h7gx0--gx@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"Xdmm"6*!%(#J0U25?UW''r2((7((9#((C+H$..2E2E2G+H"IICO'!22S8"::7H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v 2	.C"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& Eydnn.A.A.C)DEcJ#'>>##6 '|'7'7'@A  NN,-e2	.h '':<Scgh 	pJ>>%%k*..2G&H*..Y`JabD  r*11 -P3o )*jS]SaSablSm "266v?\]_ijt_uv4 3o p	p 8B~~i7PU^UbUbcnUo{3u'"%>>+6&z~~e'<=()AB*96P`mn&z~~o'FG&~7Xhkl 1JZ]^)*..*ABJd nn[1
 	
3os   &=\'r   )r   r   r   r   r   r   floatr   r   r`  rS  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                   `    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y)	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   rM  r   r   r   )r*   r+   r   Nc              #   b  K   |D ]  }| j                  d| |d|j                  dd       dd|||d   |d   d	
      }|d   d   D ]a  }| j                  d|j                  d      xs |d   z  t        j	                         |j                  d      |j                  d             c  y w)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&&?~NPX7
ub8Q7RS7"# ) ) *4 0",V"4@ ' 	D fe, `oo&BeiiP_F`Fvdijudv&w&*kkmUYY{5KUYYW]M^` ``	`s   B-B/c                    | j                  |      }| j                  ||      }| j                  ||      }|d   d   d   d   }|j                  d      dk(  r'| j	                  d| t
        j                               S | j                  | j                  |d   |d	   |t        |d
      t        |d            ||j                  d      |j                  d            S )Nr   r  albumvideoAlbumInfo	videoTypesingleVideozhttps://www.iq.com/play/r@  totalPageRange)r   r  r  r  )r   r  r  r  r   desc)
rN  rq   rO  r   rn   r   r  ru   r  r   )rY   r*   ry   rv   	next_data
album_datas         r   r   zIqAlbumIE._real_extract7  s    >>#&((h7,,Wh?	w'7@AQR
>>+&-7??%=hZ#H$++-XX##MM*Y/<L1Mx&y2de&y2deg jnnV,jnnV.D	F 	Fr!   )Nr  r	  )	r   r   r   r   r   ru  r   r  r   r   r!   r   rw  rw  	  ss    GMJD I

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