
    V|he2                         S SK r 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   " S S\	5      r " S	 S
\	5      r " S S\	5      rg)    N   )InfoExtractor   )
compat_ord)	ExtractorErrordetermine_extencode_data_uriint_or_none
orderedSetparse_iso8601str_or_noneurl_basenameurshiftc            
           \ rS rSrSrSrS/rSrSSSS	S
SS.SS0S.SSS	SSS.SS0S.SSSSS	SSS.SS0S.SSS.SSS.SSS./rS  r	S! r
\S" 5       rS# rS$ rS%rg&)'LeIE   u	   乐视网zlhttps?://(?:www\.le\.com/ptv/vplay|(?:sports\.le|(?:www\.)?lesports)\.com/(?:match|video))/(?P<id>\d+)\.htmlCNz#http://www.le.com/ptv/vplay/%s.htmlz)http://www.le.com/ptv/vplay/22005890.html edadcfe5406976f42f9f266057ee5e4022005890mp4uB   第87届奥斯卡颁奖礼完美落幕 《鸟人》成最大赢家z$md5:a9cb175fd753e2962176b7beca21a47c)idexttitledescriptionhls_prefer_nativeT)urlmd5	info_dictparamsz(http://www.le.com/ptv/vplay/1415246.html1415246u   美人天下01z$md5:28942e650e82ed4fcc8e4de919ee854d)r   r   r   zFThis video is available only in Mainland China, thus a proxy is neededz(http://www.le.com/ptv/vplay/1118082.html 2424c74948a62e5f31988438979c5ad11118082u   与龙共舞 完整版z$md5:7506a5eeb1722bb9d4068f85024e3986)noter   r   r   r   z(http://sports.le.com/video/25737697.htmlr   only_matchingz-http://www.lesports.com/match/1023203003.htmlz*http://sports.le.com/match/1023203003.htmlc                 V    SnX2:  a!  [        US5      US-  S-  -   nUS-  nX2:  a  M!  U$ )Nr   r      )r   )selfparam1param2_loc3_s       P/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/leeco.pyrorLeIE.rorM   s=    oVQ'FQJ2+=>FaKF o     c                 4    SnU R                  XS-  5      U-  $ )NiC   )r-   )r(   r)   _loc2_s      r,   calc_time_keyLeIE.calc_time_keyT   s    xx,v55r/   c                    U S S R                  S5      R                  5       S:w  a  U $ U SS  n [        S[        U 5      -  5      n[	        U 5       H)  u  p#[        U5      nUS-  USU-  '   US-  USU-  S-   '   M+     [        U5      S-
  nXS  US U -   n[        [        U 5      5      n[        [        U 5      5       H  nUSU-     S-  USU-  S-      -   XV'   M     [        U5      $ )N   utf-8vc_01r      r      )decodelower	bytearraylen	enumerater   rangebytes)encrypted_data_loc4_idxvalb_loc7_is          r,   decrypt_m3u8LeIE.decrypt_m3u8Y   s   "1$$W-335@!!'+1s>223!.1HC3A2gF1s7O"#b&F1s7Q; 2 &kBt,3~./s>*+Aq1u*VAEAI->>FI , V}r/   c                 x    US   S   nUS   S:X  a)  US   nUS:X  a  U R                  5         g [        SU-  SS	9eg )
Nmsgs
playstatusstatusr   flagr   zGeneric error. flag = %dTexpected)raise_geo_restrictedr   )r(   	play_jsonrM   rO   s       r,   _check_errorsLeIE._check_errorsl   sT    v&|4
h1$f%Dqy))+$%?$%FQUVV %r/   c                 b  ^ ^ T R                  U5      mT R                  UT5      nT R                  STSTSSSST R                  [	        [
        R
                  " 5       5      5      SSS.T R                  5       S	9nT R                  U5        UU 4S
 jn/ n/ nUS   S   nUS   S   nUR                  S/ 5      R                  5        H  u  pX;   a  M  UR                  U	5        XS   -   nU" X5      R                  5        HZ  u  pU[        U
S   5      U SU	 3US:X  a  SOS[        U	5      S.nU	SS  S:X  a  [        U	S S 5      US'   UR                  U5        M\     M     [        T R                  SUSS S9S[        R                   " SS9S9nT R#                  SUS S!9nTUUS"   US#   UUS$S%.$ )&Nz.http://player-pc.le.com/mms/out/video/playJsonzDownloading flash playJson datar   i   i  z
www.le.comcn)r   platidsplatidformatsourcetkeydomainregion)queryheadersc           
         > TR                  U TSU 3SSSSS.S9nTR                  US   S   S	   TS
U 3S9nTR                  UR                  5       5      nS[	        US5      0$ )Nz"Download JSON metadata for format r      ios)m3vr[   expecttss)r`   nodelistr   locationz(Downloading m3u8 information for format )r#   hlszapplication/vnd.apple.mpegurl)_download_json_request_webpagerI   readr	   )	media_url	format_id
nodes_datareq	m3u8_datamedia_idr(   s        r,   get_flash_urls*LeIE._real_extract.<locals>.get_flash_urls   s    ,,84YK@ 	 - J '':&q)*5x?	{K ( MC ))#((*5I y2QR r/   rL   playurlr^   r   dispatch-rj   m3u8_nativehttp)r   r   ro   protocolqualitypheightu   发布时间&nbsp;([^<>]+) zpublish time)default    )hours)	delimitertimezoner   Ffatalr   pic)resr|   )r   formatsr   	thumbnailr   	timestamp_format_sort_fields)	_match_id_download_webpagerk   r3   inttimegeo_verification_headersrT   getitemsappendr   r
   r   _html_search_regexdt	timedelta_html_search_meta)r(   r   pageplay_json_flashrt   extracted_formatsr   rv   play_domainro   format_datarn   r{   
format_urlfpublish_timer   rs   s   `                @r,   _real_extractLeIE._real_extractv   s   >>#&%%c84--<7**3tyy{+;<&	@ 113 . 5 	?+	* !&))4h'*&-kk*b&A&G&G&I"I-$$Y/#!n4I(6y(L(R(R(T$%(Q8$,:Qyk!:19U1B*95 RS>S("-in"=AhKq! )U 'J( %T%<%<*D.$ &= &PBLLq$9; ,,]D,N W% &%#5
 	
r/    N)__name__
__module____qualname____firstlineno__IE_DESC
_VALID_URL_GEO_COUNTRIES_URL_TEMPLATE_TESTSr-   r3   staticmethodrI   rT   r   __static_attributes__r   r/   r,   r   r      s    G AJVN9M ;1YA	
  
 :%A	
  
 Y91-A	
  
 : ? <U-F`6
  $WN
r/   r   c                   |   ^  \ 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./r\U 4S j5       rS rSr	U =r
$ )LePlaylistIE   z;https?://[a-z]+\.le\.com/(?!video)[a-z]+/(?P<id>[a-z0-9_]+)zhttp://www.le.com/tv/46177.html46177u   美人天下z$md5:395666ff41b44080396e59570dbac01c)r   r   r   #   )r   r   playlist_countz(http://tv.le.com/izt/wuzetian/index.htmlwuzetianu   武媚娘传奇z$md5:e12499475ab3d50219e5bba00b3cb248`   )r   r   playlist_mincountz)http://tv.le.com/pzt/lswjzzjc/index.shtmlTr$   z"http://www.le.com/comic/92063.htmlz5http://list.le.com/listn/c1009_sc532002_d2_p1_o1.htmlc                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ )NF)r   suitablesuper)clsr   	__class__s     r,   r   LePlaylistIE.suitable   s&    c**uE0@0EEr/   c                 |   U R                  U5      nU R                  X5      n[        [        R                  " SU5      5      nU Vs/ s H$  nU R                  [        R                  U-  SS9PM&     nnU R                  SUSS9R                  S5      S   nU R                  S	USS9nU R                  XbUUS
9$ s  snf )Nz8<a[^>]+href="http://www\.letv\.com/ptv/vplay/(\d+)\.htmlLe)iekeywordsFr   u   ，r   r   )playlist_titleplaylist_description)r   r   r   refindall
url_resultr   r   r   splitplaylist_result)	r(   r   playlist_idr   	media_idsrs   entriesr   r   s	            r,   r   LePlaylistIE._real_extract   s    nnS)%%c7 rzzG O P	 $-.#,x ??4#5#5#@T?J#, 	 . &&z4-2 ' 449E%LD,,]D,N##G9D $ F 	F.s   +B9r   )r   r   r   r   r   r   classmethodr   r   r   __classcell__)r   s   @r,   r   r      s    OJ 1#A

  :&A
  	 ;
 4 G1F: F FF Fr/   r   c                   r    \ 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
./r\S 5       rS r	S r
Srg)LetvCloudIE   u	   乐视云z)https?://yuntv\.letv\.com/bcloud.html\?.+z=http://yuntv.letv.com/bcloud.html?uu=p7jnfw5hw9&vu=467623dedf 26450599afd64c513bc77030ad15db44p7jnfw5hw9_467623dedfr   zVideo p7jnfw5hw9_467623dedf)r   r   r   )r   r   r   zvhttp://yuntv.letv.com/bcloud.html?uu=p7jnfw5hw9&vu=ec93197892&pu=2c7cd40209&auto_play=1&gpcflag=1&width=640&height=360 e03d9cc8d9c13191e1caf277e42dbd31p7jnfw5hw9_ec93197892zVideo p7jnfw5hw9_ec93197892z=http://yuntv.letv.com/bcloud.html?uu=p7jnfw5hw9&vu=187060b6fd cb988699a776b22d4a41b9d43acfb3acp7jnfw5hw9_187060b6fdzVideo p7jnfw5hw9_187060b6fdc                    U S   S:X  a  Sn/ SQnOU S   S:X  a  Sn/ SQnSR                  W Vs/ s H	  o3X   -   PM     sn5      W-   n[        R                  " UR                  5       5      R	                  5       U S	'   g s  snf )
Ncfflash 2f9d6924b33a165a6d8b5d3d42f4f987)r   r[   ranuuvervuhtml5fbeh5player12c43eccf2bec3300344)r   r   r   bverr    sign)joinhashlibr   encode	hexdigest)objsaltr   item
input_datas        r,   	sign_dataLetvCloudIE.sign_data  s    t95D>EY'!4D5EWW5A54SY.5ABTI
kk*"3"3"56@@BF Bs   A?c                   ^ ^^^ UU UU4S jnU" U[         R                   " 5       5      nUR                  S5      S:X  a  U" XS   5      nUR                  S5      (       dc  UR                  S5      (       a  [        SR                  US   5      SS	9eUR                  S5      (       a  [        S
US   -  SS	9e[        S5      eS n/ nUS   S   S   R	                  5        H  n	U	S   n
U" U
S   5      nU" [        U5      5      nUR                  U[        U5      [        U
R                  S5      5      [        U
R                  S5      5      [        U
R                  S5      5      [        U
R                  S5      5      S.5        M     U$ )Nc           	         > U SSSTT[        U5      S.nTR                  U5        TR                  S[        R                  R                  U5      -   TSU  35      $ )Nz2.2zfirefox44.0json)r   r   r   r[   r   r   r   z!http://api.letvcloud.com/gpc.php?z#Downloading playJson data for type )strr   rk   urllibparse	urlencode)r   r   datars   r(   r   r   s      r,   get_play_json/LetvCloudIE._get_formats.<locals>.get_play_json)  sj    % 9~D NN4 &&3fll6L6LT6RR?tDF Fr/   codeiW'  r   r   messagezLetv cloud said: {}TrP   zLetv cloud returned error %dz$Letv cloud returned an unknown errorc                 L    [         R                  " U 5      R                  S5      $ )Nr7   )base64	b64decoder;   )ss    r,   r   +LetvCloudIE._get_formats.<locals>.b64decodeE  s    ##A&--g66r/   
video_infomediaplay_urlmain_urlvtype
definitionvwidthvheight)r   r   ro   format_notewidthr   )
r   r   r   r[   valuesr   r   r   r   r
   )r(   r   r   r   rs   r   rS   r   r   r  r  r   decoded_urls   ` ```        r,   _get_formatsLetvCloudIE._get_formats(  ss   	F 	F ""diik2	== E)%bK*@AI}}V$$}}Y''$%:%A%A)IBV%Wbfggv&&$%CiPVFW%Wbfgg$%KLL	7 v&|4W=DDFEZ(HHZ01C#L$56KNN$[1(g)>?*8<<+EF$X\\(%;<%hll9&=> 	 G r/   c                 H   [         R                  " SU5      n[         R                  " SU5      nU(       a  U(       d  [        SU 3SS9eUR                  S5      nUR                  S5      nUS-   U-   nU R	                  SXEU5      U R	                  S	XEU5      -   nUS
U 3US.$ )Nz
uu=([\w]+)z
vu=([\w]+)zInvalid URL: TrP   r   _r   r   zVideo )r   r   r   )r   searchr   groupr  )r(   r   uu_mobjvu_mobjr   r   rs   r   s           r,   r   LetvCloudIE._real_extractX  s    ))M3/))M3/g =!6FF]]1]]18b=##GRX>ARARSZ\^dlAmm hZ(
 	
r/   r   N)r   r   r   r   r   r   r   r   r   r  r   r   r   r/   r,   r   r      s     G=J O1)2
 H1)2
 O1)2
!F4 C C.`
r/   r   )r   datetimer   r   r   r   urllib.parser   commonr   compatr   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r/   r,   <module>r     sX       	   ! 
 
 
m
= m
`3F= 3Fll
- l
r/   