
    ĞiM                     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  G d de          Z G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          ZdS )    N   )InfoExtractor   )aes_cbc_encrypt_bytes)ExtractorErrordetermine_extfloat_or_noneint_or_none
js_to_jsontraverse_objurljoinc                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
TencentBaseIEzFSubclasses must set _API_URL, _APP_VERSION, _PLATFORM, _HOST, _REFERERc                     |                     d          }|                     d          dk    r,|,|dv r|                                  t          d|           d S d S )Nmsgcodez0.0)uH   您所在区域暂无此内容版权（如设置VPN请关闭后重试）zeThis content is not available in your area due to copyright restrictions. Please choose other videos.zTencent said: )getraise_geo_restrictedr   )selfapi_responser   s      ]C:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/extractor/tencent.py_check_api_responsez!TencentBaseIE._check_api_response   s{    u%%F##u,,    ))+++ !7#!7!7888 -,    c                    |                      d          d         }| dt          t          j                               d| j         d| d| j         d|d d          d|                                d d          d}t          t          dt          t          t          |                     d| d          dd	d
                                                                          S )Nhttp_headersz
User-Agent|z|mg3c3b04ba|0   z%||Mozilla|Netscape|Windows x86_64|00|zutf-8s   Okڣ/^r-s   PJV.B?p
whitespace)padding_mode)	get_paraminttime_APP_VERSION	_PLATFORMlowerr   bytessummapordhexupper)r   video_idurlguiduapayloads         r   	_get_ckeyzTencentBaseIE._get_ckey    s   ^^N++L9 i iTY[[!1!1 i it?P i iSW i ini i'*3B3xi i24((**SbS/i i i %8c#c7++,,88w88'BB=:%	' ' ' (+suuUUWW		5r   c                 f   d                     t          j        t          j        t          j        z   d                    }|                     |||          }i d|d|d|ddd	|d
k    rdndd|dk    rdndd|dk    rdndd|ddddddddddddddddd | j        | j        || j	        | j
        |d                     t          j        t          j        t          j        z   d!                    d"}	|                     d#|                     | j        ||	$          d%|          S )&N    )kvidcidcKey
encryptVerz8.1spcaptiontypevtt10sphlshls2dtype3defnspsrtsphttpsotypejsonspwmhevclv28drm40spvideo4spsfrhdr100host    )refererehostappVerplatformr.   flowidzQZOutputJson=)queryr   )joinrandomchoicesstringdigitsascii_lowercaser1   _HOST_REFERERr#   r$   _search_json_download_webpage_API_URL)
r   	video_urlr,   	series_idsubtitle_formatvideo_formatvideo_qualityr.   ckeyrX   s
             r   _get_video_api_responsez%TencentBaseIE._get_video_api_response,   s   wwv~fmf6L&LPRSSSTT~~h	488
8
9
 D
 %	

 Ou$<$<SS#
 LE11SSs
 LE11SSs
 M
 S
 s
 V
 C
 d
 4
  s!
" #
& DJ'
( }'ggfnV]V=S-SWYZZZ[[5
 
 
:   !143I3IM85 4J 42 423A8M M 	Mr   c                    |d         d         d         }g i }}|d         d         D ]}|                     d          st          |d                   dk    rb|                     |d         t          |d	d
          z   |dd          \  }}|                    |           |                     ||           |                    |d          |d          d|d          dd           |                     d          t          |ddfdft          d          pi }	|                     d          |                     d          t          |	                     d          d          t          |	                     d          d          |	                     d          |	                     d           |	                     d!          |	                     d"          d#d#i                     |	                     d!          d$          |	                     d%d          dk    d&
}
|D ]}|	                    |
           ||fS )'Nvlvir   uluir?   r-   m3u8)r?   ptr3   )defaultmp4Ffataltargetfnz?vkey=fvkey)r-   extbrflfic                     |d         k    S )Nr{    )_v
identifiers     r   <lambda>zDTencentBaseIE._extract_video_formats_and_subtitles.<locals>.<lambda>c   s    AdGz4I r   )expected_typeget_allvwvhaudiobandwidthi  )scale	bandwidthvfpssnamename
resolutionhdr10sdrrK   )
widthheightabrvbrfpsformat	format_idformat_notedynamic_rangehas_drm)
r   r   #_extract_m3u8_formats_and_subtitlesr   extend_merge_subtitlesappenddictr	   update)r   r   r,   video_responseformats	subtitlesrg   fmtssubsformat_responsecommon_infofr   s               @r   $_extract_video_formats_and_subtitlesz2TencentBaseIE._extract_video_formats_and_subtitlesO   s   %d+D1!4*406 	 	L&& -U8K*L*LPV*V*V!EE ',|]\^*_*_*__e5 F 2 2
d t$$$%%d9%====*51h>$3Ghh~^eOfhh        
 $''--
&4'I'I'I'IJ/ / / 524 	 $''--$((.. !4!45E!F!FdSSS !4!4[!A!ANNN"&&v..%))'22(,,V44*..|<<%w/33O4G4G4O4OQVWW&**5!449
 
  	" 	"AHH[!!!!	!!r   c           	      6   i }t          |d          pdD ]}|                    |d                                         g                               |d         |                    d          dk    rdndt          |d                   d	k    rd
ndd           |S )N)sflr}   r   langr-   captionTyper   srtr;   rp   m3u8_nativehttp)r-   rz   protocol)r   
setdefaultr%   r   r   r   )r   r   r   subtitles       r   _extract_video_native_subtitlesz-TencentBaseIE._extract_video_native_subtitlesv   s    	$\=AAGR 	 	H  &!1!7!7!9!92>>EE (] ; ;q @ @uue-:8E?-K-Kv-U-UMM[aG G     r   c                    |                      |||ddd          g}|                     |d                    t          |d          pd}|D ]N}|dvrH|                    |                      |||dd|                     |                     |d	                    Og i }}|D ]]}	|                     |	|          \  }
}|                     |	          }|                    |
           |                     |||
           ^||fS )Nr   r?   hdr   )r   r|   r}   .r   )shdfhd)ldsdr   r;   rv   )rj   r   r   r   r   r   r   r   )r   r-   r,   re   api_responses	qualitiesqr   r   r   r   r   native_subtitless                r   (_extract_all_video_formats_and_subtitlesz6TencentBaseIE._extract_all_video_formats_and_subtitles   sG   55c8YPUW\^bccd  q!1222 0LMM_Q_	 	< 	<A***$$T%A%A9eUA&? &? @ @ @((r):;;;) 	L 	LLBB<QYZZJD$#CCLQQNN4   !!$(8!KKKK	!!r   c                 Z    t          j        dd|pd                                          pd S )Nuj   \s*[_\-]\s*(?:Watch online|Watch HD Video Online|WeTV|腾讯视频|(?:高清)?1080P在线观看平台).*?$r3   )resubstrip)r   titles     r   _get_clean_titlezTencentBaseIE._get_clean_title   s3    vy "UWW-(,	-r   N)__name__
__module____qualname____doc__r   r1   rj   r   r   r   r   r   r   r   r   r      s        PP9 9 9
5 
5 
5!M !M !MF%" %" %"N	 	 	" " "(- - - - -r   r   c                   ,    e Zd ZdZdZdZdZdZdZd Z	dS )	VQQBaseIEzhttps?://v\.qq\.comz#https://h5vv6.video.qq.com/getvinfo3.5.5710901zv.qq.comc                 B    |                      d|d|t          d          S )Nz1<script[^>]*>[^<]*window\.__(?:pinia|PINIA__)\s*=z
pinia dataF)transform_sourceru   )ra   r   r   webpager,   s      r   _get_webpage_metadatazVQQBaseIE._get_webpage_metadata   s1      @\8jPU ! W W 	Wr   N)
r   r   r   _VALID_URL_BASErc   r#   r$   r_   r`   r   r   r   r   r   r      sF        ,O4HLIEHW W W W Wr   r   c                       e Zd ZdZej        dz   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d$d%id&d'd(d)gZd* Zd+S ),
VQQVideoIEz	vqq:videoz0/x/(?:page|cover/(?P<series_id>\w+))/(?P<id>\w+)z(https://v.qq.com/x/page/q326831cny0.html b11c9cb781df710d686b950376676e2aq326831cny0rs   u*   我是选手：雷霆裂阵，终极时刻z$md5:e7ed70be89244017dac2a835a10aeb1ezre:^https?://[^?#]+q326831cny0re:^shd)idrz   r   description	thumbnailr   r-   md5	info_dictz(https://v.qq.com/x/page/o3013za7cse.html a1bcf42c6d28c189bd2fe2d468abb287o3013za7cseu   欧阳娜娜VLOGz$md5:29fe847497a98e04a8c3826e499edd2ezre:^https?://[^?#]+o3013za7csez9https://v.qq.com/x/cover/7ce5noezvafma27/a00269ix3l8.html 87968df6238a65d2478f19c25adf850ba00269ix3l8u   鸡毛飞上天 第01集$md5:8cae3534327315b3872fbef5e51b5c5bz"re:^https?://[^?#]+7ce5noezvafma27   鸡毛飞上天)r   rz   r   r   r   seriesr   404)r-   r   r   skipz9https://v.qq.com/x/cover/mzc00200p29k31e/s0043cwsgj0.html fadd10bf88aec3420f06f19ee1d24c5bs0043cwsgj0u   第1集：如何快乐吃糖？z$md5:1d8c3a0b8729ae3827fa5b2d3ebd5213zre:^https?://[^?#]+s0043cwsgj0u$   青年理工工作者生活研究所skip_downloadrp   )r-   r   r   paramsz9https://v.qq.com/x/cover/mcv8hkc8zk8lnov/x0036x5qqsr.htmlT)r-   only_matchingc           
         |                      |                              dd          \  }}|                     ||          }|                     ||          }|                     |||          \  }}||                     |                     |          pt          |d                    |                     |          pt          |d          ||| 	                    |          pt          |d          t          |d          dS )Nr   re   )global	videoInfor   )r   r   desc)r   r   	pic160x90)r   	coverInfor   )r   r   r   r   r   r   r   )
_match_valid_urlgrouprb   r   r   r   _og_search_titler   _og_search_description_og_search_thumbnailr   r-   r,   re   r   webpage_metadatar   r   s           r   _real_extractzVQQVideoIE._real_extract   s    "33C88>>t[QQ)((h7755gxHH!JJ3PXZcdd**4+@+@+I+I ,o.:;KMm.n.np p 77@@ _+,<>]^^"33G<< b)*:<`aa"#35UVV
 
 	
r   N	r   r   r   IE_NAMEr   r   
_VALID_URL_TESTSr   r   r   r   r   r      s!       G*-``J :1AA:#
 
  :1'A:#
 
  K1/A>'#
 
   K16A:<#
 
 #F+  K a4Fl
 
 
 
 
r   r   c                   T    e Zd ZdZej        dz   Zddddddd	d
dddddd	gZd ZdS )VQQSeriesIEz
vqq:seriesz&/x/cover/(?P<id>\w+)\.html/?(?:[?#]|$)z-https://v.qq.com/x/cover/7ce5noezvafma27.html7ce5noezvafma27r   r   r   r   r   7   r-   r   playlist_countz-https://v.qq.com/x/cover/oshd7r0vy9sfq8e.htmloshd7r0vy9sfq8eu   恋爱细胞2z$md5:9d8a2245679f71ca828534b0f95d2a03   c                    |                      |          |                     |          }|                     |          }fdt          j        d|          D             }|                     |t          t          |          |                     t          |d          p| 
                    |                    t          |d          p|                     |                    S )Nc                 "    g | ]}d  d| dS )z	/x/cover//z.htmlr   ).0r,   re   s     r   
<listcomp>z-VQQSeriesIE._real_extract.<locals>.<listcomp>  s9       X@Y@@@@@   r   zQ<div[^>]+data-vid="(?P<video_id>[^"]+)"[^>]+class="[^"]+episode-item-rect--numberr   r   r   r   iegetterr   r   )	_match_idrb   r   r   findallplaylist_from_matchesr   r   r   r   r   r   )r   r-   r   r   episode_pathsre   s        @r   r   zVQQSeriesIE._real_extract  s   NN3''	((i8855gyII   QSQ[`R R    ))9GCLL''5EG](^(^ )J+/+@+@+I+IK K%&68TUU A 77@@ * C C 	Cr   Nr   r   r   r   r  r     s        G*-VVJ ?#&A
 

   ?#$A
 

  F$C C C C Cr   r  c                   8    e Zd ZdZdZdZdZdZdZd Z	d Z
d Zd	S )

WeTvBaseIEz-https?://(?:www\.)?wetv\.vip/(?:[^?#]+/)?playzhttps://play.wetv.vip/getvinfor   4830201zwetv.vipc                 v    |                      t          |                     ||          d          |d          S )N)props	pagePropsdataFrt   )_parse_jsonr   _search_nextjs_datar   s      r   r   z WeTvBaseIE._get_webpage_metadata(  sB    11'8DDFdeeE   # # 	#r   c                 ^   |                      |                              dd          \  }}|                     ||          }|                     ||          }|                     |||          \  }}||                     |                     |          pt          |d                    t          |d          p|                     |          ||| 	                    |          t          t          |d                    t          |d          t          t          |d                    d	S )Nr   re   r  r  )r   duration)r   episode)	r   r   r   r   r   r   r!  r   episode_number)r   r   rb   r   r   r   r   r   r   r   r
   r   s           r   _extract_episodezWeTvBaseIE._extract_episode-  s9   "33C88>>t[QQ)((h7755gxHH!JJ3PXZcdd**4+@+@+I+I ,e.:;KMc.d.df f()9;WXX D#::7CC"227;;#L1AC\$]$]^^"#35KLL),7GIa*b*bcc
 
 	
r   c                    |                      |          |                     |          }|                     |          }fd|                    d          D             pt	          j        d|          }|                     ||t          |          |                     t          |d          p| 
                    |                    t          |d          p|                     |                    S )Nc                 ,    g | ]}d  d|d          S )z/play/r  r6   r   )r  r"  re   s     r   r  z.WeTvBaseIE._extract_series.<locals>.<listcomp>F  s.    qqqG?9??wu~??qqqr   	videoListz9<a[^>]+class="play-video__link"[^>]+href="(?P<path>[^"]+)r  r  r  )r  rb   r   r   r   r  r  r   r   r   r   r   )r   r-   r  r   r   r  re   s         @r   _extract_serieszWeTvBaseIE._extract_seriesA  s   NN3''	((i8855gyIIqqqqO_OcOcdoOpOpqqq nJ'celmm 	 ))9GCLL''5EG](^(^ )J+/+@+@+I+IK K%&68TUU A 77@@ * C C 	Cr   N)r   r   r   r   rc   r#   r$   r_   r`   r   r$  r(  r   r   r   r  r    sd        FO/HLIEH# # #

 
 
(C C C C Cr   r  c                       e Zd ZdZej        dz   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# Zd$S )%WeTvEpisodeIEzwetv:episode7/(?P<series_id>\w+)(?:-[^?#]+)?/(?P<id>\w+)(?:-[^?#]+)?zXhttps://wetv.vip/en/play/air11ooo2rdsdi3-Cute-Programmer/v0040pr89t9-EP1-Cute-Programmer 0c70fdfaa5011ab022eebc598e64bbbev0040pr89t9rs   zEP1: Cute Programmer$md5:e87beab3bf9f392d6b9e541a63286343z"re:^https?://[^?#]+air11ooo2rdsdi3Cute Programmer	Episode 1r   i  r   
r   rz   r   r   r   r   r"  r#  r!  r   r   z4https://wetv.vip/en/play/u37kgfnfzs73kiu/p0039b9nvik 3b3c15ca4b9a158d8d28d5aa9d7c0a49p0039b9nvikzEP1: You Are My Glory$md5:831363a4c3b4d7615e1f3854be3a123bz"re:^https?://[^?#]+u37kgfnfzs73kiuYou Are My Gloryi	  zhttps://wetv.vip/en/play/lcxgwod5hapghvw-WeTV-PICK-A-BOO/i0042y00lxp-Zhao-Lusi-Describes-The-First-Experiences-She-Had-In-Who-Rules-The-World-%7C-WeTV-PICK-A-BOO 71133f5c2d5d6cad3427e1b010488280i0042y00lxpz$md5:f7a0857dbe5fbbe2e7ad630b92b54e6az$md5:76260cb9cdc0ef76826d7ca9d92fadfazre:^https?://[^?#]+i0042y00lxpzWeTV PICK-A-BOOz	Episode 0r   i  c                 ,    |                      |          S Nr$  r   r-   s     r   r   zWeTvEpisodeIE._real_extract      $$S)))r   N)	r   r   r   r   r  r   r   r   r   r   r   r   r*  r*  Q  s        G+.hhJ j1+A>'"#
 
   F1,A>("#
 
   s1;A:'"#
 
 =-F^* * * * *r   r*  c                   P    e Zd Zej        dz   Zdddddddd	d
dddddgZd ZdS )WeTvSeriesIE%/(?P<id>\w+)(?:-[^/?#]+)?/?(?:[?#]|$)z5https://wetv.vip/play/air11ooo2rdsdi3-Cute-Programmerair11ooo2rdsdi3r/  r.  r     r  z9https://wetv.vip/en/play/u37kgfnfzs73kiu-You-Are-My-Gloryu37kgfnfzs73kiur5  r4  rR   c                 8    |                      |t                    S r9  )r(  r*  r;  s     r   r   zWeTvSeriesIE._real_extract  s    ##C777r   N)r   r   r   r  r   r   r   r   r   r   r   r>  r>    s        +.VVJ G#&A
 

   K#'A
 

  F$8 8 8 8 8r   r>  c                   &    e Zd ZdZdZdZdZdZdZdS )IflixBaseIEz.https?://(?:www\.)?iflix\.com/(?:[^?#]+/)?playz https://vplay.iflix.com/getvinfor   330201zwww.iflix.comN)	r   r   r   r   rc   r#   r$   r_   r`   r   r   r   rE  rE    s,        GO1HLIEHHHr   rE  c                   p    e Zd ZdZej        dz   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gZd ZdS )IflixEpisodeIEziflix:episoder+  z9https://www.iflix.com/en/play/daijrxu03yypu0s/a0040kvgaza 9740f9338c3a2105290d16b68fb3262fa0040kvgazars   z&EP1: Put Your Head On My Shoulder 2021z$md5:c095a742d3b7da6dfedd0c8170727a42z"re:^https?://[^?#]+daijrxu03yypu0sz!Put Your Head On My Shoulder 2021r0  r   iO
  r   r1  r   zohttps://www.iflix.com/en/play/fvvrcc3ra9lbtt1-Take-My-Brother-Away/i0029sd3gm1-EP1%EF%BC%9ATake-My-Brother-Away 375c9b8478fdedca062274b2c2f53681i0029sd3gm1u   EP1：Take My Brother Awayz$md5:f0f7be1606af51cd94d5627de96b0c76z"re:^https?://[^?#]+fvvrcc3ra9lbtt1zTake My Brother Away   c                 ,    |                      |          S r9  r:  r;  s     r   r   zIflixEpisodeIE._real_extract  r<  r   N)	r   r   r   r   rE  r   r   r   r   r   r   r   rH  rH    s        G,/iiJ K1=A>9"#
 
   A11A>,"#
 
 F@* * * * *r   rH  c                   P    e Zd Zej        dz   Zdddddddd	d
dddddgZd ZdS )IflixSeriesIEr?  z=https://www.iflix.com/en/play/g21a6qk4u1s9x22-You-Are-My-Herog21a6qk4u1s9x22zYou Are My Heroz$md5:9c4d844bc0799cd3d2b5aed758a2050ar  (   r  z*https://www.iflix.com/play/0s682hc45t0ohll0s682hc45t0ohllzMiss Gu Who Is Silentz$md5:a9651d0236f25af06435e845fa2f8c78   c                 8    |                      |t                    S r9  )r(  rH  r;  s     r   r   zIflixSeriesIE._real_extract  s    ##C888r   N)r   r   r   rE  r   r   r   r   r   r   r   rP  rP    s        ,/WWJ O#&A
 

   <#,A
 

  F$9 9 9 9 9r   rP  )rZ   r   r\   r"   commonr   aesr   utilsr   r   r	   r
   r   r   r   r   r   r   r  r  r*  r>  rE  rH  rP  r   r   r   <module>rY     s    				   ! ! ! ! ! ! ' ' ' ' ' '                 E- E- E- E- E-M E- E- E-PW W W W W W W WK
 K
 K
 K
 K
 K
 K
 K
\$C $C $C $C $C) $C $C $CN/C /C /C /C /C /C /C /Cd4* 4* 4* 4* 4*J 4* 4* 4*n8 8 8 8 8: 8 8 82    *   %* %* %* %* %*[ %* %* %*P9 9 9 9 9K 9 9 9 9 9r   