
    VGh*                     |    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m	Z	m
Z
mZmZ  G d de      Z G d d	e      Zy)
    N   )InfoExtractor   )ExtractorError
clean_htmlget_element_by_class
js_to_jsonstr_or_nonestrip_jsonpc                       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dddd
dddddded	dddd
d d!dd"d#d$ed	dd%d&d
d'd(dd)d*d+ed	dd,d-d
d.d/d0g d1d2d3d4	dgZed5        Z	d6 Z
d7 Zy8)9YoukuIEyoukuu   优酷z(?x)
        (?:
            https?://(
                (?:v|play(?:er)?)\.(?:youku|tudou)\.com/(?:v_show/id_|player\.php/sid/)|
                video\.tudou\.com/v/)|
            youku:)
        (?P<id>[A-Za-z0-9]+)(?:\.html|/v\.swf|)
    z:http://player.youku.com/player.php/sid/XNDgyMDQ2NTQw/v.swfTurlonly_matchingz/http://v.youku.com/v_show/id_XNjA1NzA2Njgw.htmlzVideo protected with passwordXNjA1NzA2Njgwmp4uH   邢義田复旦讲座之想象中的胡人—从“左衽孔子”说起g    `@zre:^https?://.*
FoxJin1006	322014285z&http://i.youku.com/u/UMTI4ODA1NzE0MA==)	idexttitleduration	thumbnailuploaderuploader_iduploader_urltagsvideopassword100600404)r   note	info_dictparamsskipz/http://v.youku.com/v_show/id_XOTUxMzg4NDMy.htmlXOTUxMzg4NDMyuB   我的世界☆明月庄主☆车震猎杀☆杀人艺术Minecraftgq=
ף@u   明月庄主moon38465621z6https://www.youku.com/profile/index/?uid=UMTUzODYyNDg0)r   r#   z4https://v.youku.com/v_show/id_XNTA2NTA0MjA1Mg==.htmlXNTA2NTA0MjA1MguO   Minecraft我的世界：建造超大巨型航空飞机，菜鸟vs高手vs黑客gףp=
@u   波哥游戏解说	156688084z6https://www.youku.com/profile/index/?uid=UNjI2NzUyMzM2z4https://v.youku.com/v_show/id_XNTE1MzczOTg4MA==.htmlXNTE1MzczOTg4MAu   国产超A特工片gQv@u   陈晓娟说历史
1640913339z:https://www.youku.com/profile/index/?uid=UNjU2MzY1MzM1Ng==z8https://play.tudou.com/v_show/id_XNjAxNjI2OTU3Ng==.html?XNjAxNjI2OTU3Ngu3   阿斯塔意识到哈里杀了人，自己被骗了z4https://m.ykimg.com/0541010164F732752794D4D7B70331D188758207z6https://www.youku.com/profile/index/?uid=UMzU1MDMyODI4u   英美剧场g
ףp=:R@)	r   r   r   r   r   r   r   r   r   c            	          dj                  t        t        j                               dj                  t	        j
                  t        j                  d                  S )Nz{}{}    )k)formatinttimejoinrandomchoicesstringascii_letters     _/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/youku.py	get_ysuidzYoukuIE.get_ysuidi   s?    }}S-rwwNN6//1507 8 	8r;   c                 >    ddddddddddd
}|j                  |      S )Nh6h5h4h3h2h1)
3gp3gphdflvflvhdr   mp4hdmp4hd2mp4hd3hd2hd3)get)selffm_dicts      r<   get_format_namezYoukuIE.get_format_namen   s7    
 yy}r;   c                    | j                  |      }| j                  dd| j                                | j                  ddd       | j                  d|d      \  }}|j                  d   dd	 }|d
d|t        j
                         dz  d}| j                  d      }|r||d<   d|i}|j                  | j                                | j                  d|d||      d   }	|	j                  d      }
|
ri|
j                  d      }|d|v rt        dd      |rd|v rt        dd      d|
j                  d      z  }||dt        |      z   z  }t        |      |	d    }|d!   }|	d"   D cg c]w  }|j                  d#      d$k7  ra|d%   | j                  |j                  d&            d'd(t        |j                  d)            |j                  d*      |j                  d+      d,y }}||||j                  d-      |j                  d.      |j                  d/      t        |j                  d0            |	j                  d1i       j                  d2      |j                  d3      d4	S c c}w )5Nz	youku.com__ysuid	xreferrerzhttp://www.youku.comzhttps://log.mmstat.com/eg.jszRetrieving cna infoetagr   0564z192.168.1.1i  )vidccode	client_iputid	client_tsr   passwordRefererz"https://ups.youku.com/ups/get.jsonzDownloading JSON metadata)queryheadersdataerrorr"   u$   因版权原因无法观看此视频z8Youku said: Sorry, this video is available in China onlyT)expectedu   该视频被设为私密z(Youku said: Sorry, this video is privatezYouku server reported error %icodez: videor   streamchannel_typetailm3u8_urlstream_typer   m3u8_nativesizewidthheight)r   	format_idr   protocolfilesizern   ro   secondslogousernameuseridr   homepager   )	r   r   formatsr   r   r   r   r   r   )	_match_id_set_cookier=   _download_webpage_handlera   r4   	get_paramupdategeo_verification_headers_download_jsonrN   r   r   rR   r3   r
   )rO   r   video_id_urlhcnabasic_data_paramsvideo_passwordra   rb   rc   
error_notemsg
video_datar   rg   rx   s                    r<   _real_extractzYoukuIE._real_extract}   s   >>#&i1ABk3IJ//*H6KM4 ll6"1R( &t+
 8,:j) s
 	t4467""0('#W # 6 7=>
 !6*J%*PT^*^$NY]_ _ :j H$>O O 769JJ)4*Z"888C$S)) ']
7# XP &**^*D*N *%--fjj.GH%FJJv./ZZ(jj*
 P P "y1#/"z2&z~~h'?@ HHZ488DNN6*

 
	
Ps   ,A<I)N)__name__
__module____qualname__IE_NAMEIE_DESC
_VALID_URLlist_TESTSstaticmethodr=   rR   r   r:   r;   r<   r   r      s5   GGJ L A/!_+$&D

 X
 #( A!Y+*%T

 F#f+,&T

 F#*+,'X

 J#JO%T&

{JFX 8 8H
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dddddddgZd Zd Zy)YoukuShowIEz9https?://list\.youku\.com/show/id_(?P<id>[0-9a-z]+)\.htmlz
youku:showz8http://list.youku.com/show/id_zc7c670be07ff11e48b3f.htmlzc7c670be07ff11e48b3fu   花千骨 DVD版z$md5:a1ae6f5618571bbeb5c9821f9c81b558)r   r   description2   )r   r#   playlist_countz8http://list.youku.com/show/id_zefbfbd70efbfbd780bef.htmlzefbfbd70efbfbd780befu   超级飞侠3z$md5:275715156abebe5ccc2a1992e9d56b98   z8http://list.youku.com/show/id_za7c275ecd7b411e1a19e.htmlTr   z8http://list.youku.com/show/id_zefbfbd61237fefbfbdef.htmlz8http://list.youku.com/show/id_z20eb4acaf5c211e3b2ad.htmlc           
      p   d|d<   | j                  ||||d       j                  d      }|d d gS t        d|      xs t        d|      }|t        d      t	        j
                  d	|      }||D cg c]6  }| j                  | j                  |d
      t        j                               8 c}fS c c}w )Ncbcallbackc                 *    t        t        |             S )N)r	   r   )ss    r<   <lambda>z.YoukuShowIE._extract_entries.<locals>.<lambda>   s    z+a.'A r;   )r`   r"   transform_sourcehtmlzp-drama-gridzp-drama-half-rowzNo episodes foundz<a[^>]+href="([^"]+)"zhttp:)
r   rN   r   r   refindall
url_result_proto_relative_urlr   ie_key)	rO   playlist_data_urlshow_idr"   r`   playlist_data
drama_list
video_urls	video_urls	            r<   _extract_entrieszYoukuShowIE._extract_entries   s     j++we$A , CCF3v; 	  $<*>=I Q-.@-P 	 !455ZZ 8*E
') OOD44YH'..JZ[) ) 	) )s   4;B3c           	         | j                  |      }| j                  ||      }g }| j                  | j                  d|d      |t              }| j                  d|d|d   dd	      \  }}| j                  d
|d      }t        j                  d|      }	|j                  |       t        |	      D ]C  \  }
}||k(  r| j                  d|d|
dz    |d   |d	      \  }}|3|j                  |       E | j                  d|d      }|r|j                  d      d   nd }t        d|      }|rt        d|      nd }| j                  ||||      S )Nzvar\s+PageConfig\s*=\s*({.+});zpage config)r   z!http://list.youku.com/show/modulez&Downloading initial playlist data pageshowidshowInfo)r   tab)r"   r`   z<div[^>]+id="(reload_\d+)zfirst page reload idz<li[^>]+data-id="([^"]+)">z"http://list.youku.com/show/episodezDownloading playlist data page r   )r   stager   F)fatal,r   zp-introz
intro-more)ry   _download_webpage_parse_json_search_regexr	   r   _html_search_regexr   r   extend	enumerate_html_search_metasplitr   playlist_result)rO   r   r   webpageentriespage_config
first_pageinitial_entriesfirst_page_reload_id
reload_idsidx	reload_idr   new_entriesdescplaylist_title	detail_liplaylist_descriptions                     r<   r   zYoukuShowIE._real_extract   s   ..%((g6&&t'9'9-w(Gj ' 2 '+&;&;/9!(+! '< '#
O  $66(*6L N ZZ <jI
''
3 	,NC00!224g6sQwi@%h/& 3 NA{ &{+	, %%mWE%J/3C+(G<	(1  4) %7; 	 ##Wn.BD 	Dr;   N)r   r   r   r   r   r   r   r   r:   r;   r<   r   r      s    MJG J)'A

  J)$A

 	 J J J3F>) 'Dr;   r   )r6   r   r8   r4   commonr   utilsr   r   r   r	   r
   r   r   r   r:   r;   r<   <module>r      s=     	   ! t
m t
nZD- ZDr;   