
    VGhM                     <   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y)    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
y	)
TencentBaseIEzFSubclasses must set _API_URL, _APP_VERSION, _PLATFORM, _HOST, _REFERERc                     |j                  d      }|j                  d      dk7  r%|"|dv r| j                          t        d|       y y )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      a/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/tencent.py_check_api_responsez!TencentBaseIE._check_api_response   s_    u%F#u,   ))+ >#!788 2A,    c                    | j                  d      d   }| dt        t        j                                d| j                   d| d| j                   d|d d  d|j                         d d  d}t        t        dt        t        t        |             d| d      dd	d
      j                         j                         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ZqTYY[!1 2,t?P?P>QQRSWRXXYnn%Qs3Bxj"((*Sb/1BBgi %Ac#c7+,-Qwi8'B=:%	' (+suUUW		5r   c                    dj                  t        j                  t        j                  t        j
                  z   d            }| j                  |||      }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j                  t        j                  t        j                  t        j
                  z   d!            d"}	| j                  d#| j                  | 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~~fmmf6L6L&LPRST~~h	48
8
9
 D
 %	

 Ou$<S#
 LE1Ss
 LE1Ss
 M
 S
 s
 V
 C
 d
 4
  s!
" #
& DJJ'
( }}''ggfnnV]]V=S=S-SWYZ[5
:   !143I3IMM85 4J 423A8M 	Mr   c                    |d   d   d   }g i }}|d   d   D ]  }|j                  d      st        |d         dk(  rO| j                  |d   t        |d	d
      z   |dd      \  }}|j	                  |       | j                  ||       t|j                  |d    |d    d|d    dd        |j                  d      t        |ddfdft        d      xs i }	|j                  d      |j                  d      t        |	j                  d      d      t        |	j                  d      d      |	j                  d      |	j                  d       |	j                  d!      |	j                  d"      d#d#ij                  |	j                  d!      d$      |	j                  d%d      dk7  d&
}
|D ]  }|j                  |
        ||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*LPV*V!EE ',|]\^*__e5 F 2
d t$%%d9%=*512>$3G2H~^eOfNgh   	 $''-
&4'IJ/ 524 	 $''-$((. !4!45E!FdS !4!4[!AN"&&v.%))'2(,,V4*..|<%w/33O4G4G4OQVW&**5!49
  	"AHH[!	" 	!!r   c           	          i }t        |d      xs dD ]d  }|j                  |d   j                         g       j                  |d   |j	                  d      dk(  rdndt        |d         d	k(  rd
ndd       f |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GR 	H  &!1!7!7!92>EE (] ;q @ue-:8E?-Kv-UM[aG 	 r   c                    | j                  |||ddd      g}| j                  |d          t        |d      xs d}|D ]@  }|dvs|j                  | j                  |||dd|             | j                  |d	          B g i }}|D ]M  }	| j	                  |	|      \  }
}| j                  |	      }|j                  |
       | j                  |||
       O ||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   s   55c8YPUW\^bcd  q!12 0LM_Q_	 	<A**$$T%A%A9eUA&? @((r):;		<  ) 	LLBB<QYZJD$#CCLQNN4 !!$(8!K	L 	!!r   c                 \    t        j                  dd|xs d      j                         xs 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   s.    vvy"UW-(,	-r   N)__name__
__module____qualname____doc__r   r1   rj   r   r   r   r   r   r   r   r   r      s+    P9
5!MF%"N	"(-r   r   c                   *    e Zd ZdZdZdZdZdZdZd Z	y)	VQQBaseIEzhttps?://v\.qq\.comz#https://h5vv6.video.qq.com/getvinfo3.5.5710901zv.qq.comc                 8    | j                  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   s+      @\8jPU ! W 	Wr   N)
r   r   r   _VALID_URL_BASErc   r#   r$   r_   r`   r   r   r   r   r   r      s&    ,O4HLIEH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y+),
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           
         | j                  |      j                  dd      \  }}| j                  ||      }| j                  ||      }| j	                  |||      \  }}|| j                  | j                  |      xs t        |d            | j                  |      xs t        |d      ||| j                  |      xs 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>>t[Q)((h755gxH!JJ3PXZcd**4+@+@+I ,o.:;KMm.np 77@ _+,<>]^"33G< b)*:<`a"#35U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                   \    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y)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                    | j                  |      }| j                  ||      }| j                  ||      }t        j                  d|      D cg c]  }d| d| d }}| j                  ||t        t        |      | j                  t        |d      xs | j                  |            t        |d      xs | j                  |            S c c}w )NzQ<div[^>]+data-vid="(?P<video_id>[^"]+)"[^>]+class="[^"]+episode-item-rect--numberz	/x/cover//z.htmlr   r   r   r   iegetterr   r   )	_match_idrb   r   r   findallplaylist_from_matchesr   r   r   r   r   r   )r   r-   re   r   r   r,   episode_pathss          r   r   zVQQSeriesIE._real_extract  s    NN3'	((i855gyIQSQ[Q[`R X9YKq
%@   ))9GCL''5EG](^ )J+/+@+@+IK%&68TU A 77@ * C 	C	s   CNr   r   r   r   r  r     s_    G**-VVJ ?#&A

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

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

WeTvBaseIEz-https?://(?:www\.)?wetv\.vip/(?:[^?#]+/)?playzhttps://play.wetv.vip/getvinfor   4830201zwetv.vipc                 ^    | j                  t        | j                  ||      d      |d      S )N)props	pagePropsdataFrt   )_parse_jsonr   _search_nextjs_datar   s      r   r   z WeTvBaseIE._get_webpage_metadata(  s7    11'8DFdeE   # 	#r   c                    | j                  |      j                  dd      \  }}| j                  ||      }| j                  ||      }| j	                  |||      \  }}|| j                  | j                  |      xs t        |d            t        |d      xs | j                  |      ||| j                  |      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-  s   "33C8>>t[Q)((h755gxH!JJ3PXZcd**4+@+@+I ,e.:;KMc.df()9;WX D#::7C"227;#L1AC\$]^"#35KL),7GIa*bc
 	
r   c                    | j                  |      }| j                  ||      }| j                  ||      }|j                  d      D cg c]  }d| d|d     c}xs t	        j
                  d|      }| j                  |||t        |      | j                  t        |d      xs | j                  |            t        |d      xs | j                  |            S c c}w )	N	videoListz/play/r
  r6   z9<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  re   r   r   r  r  s           r   _extract_serieszWeTvBaseIE._extract_seriesA  s    NN3'	((i855gyIO_OcOcdoOpqGF9+Qwu~.>?q nJJ'celm 	 ))9GCL''5EG](^ )J+/+@+@+IK%&68TU A 77@ * C 	C rs   	CN)r   r   r   r   rc   r#   r$   r_   r`   r   r!  r$  r   r   r   r  r    s0    FO/HLIEH#

(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y$)%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                 $    | j                  |      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                   X    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y)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u37kgfnfzs73kiur1  r0  rR   c                 .    | j                  |t              S r5  )r$  r&  r7  s     r   r   zWeTvSeriesIE._real_extract  s    ##C77r   N)r   r   r   r  r   r   r   r   r   r   r   r:  r:    s[    ++.VVJ G#&A

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

 F$8r   r:  c                   $    e Zd ZdZdZdZdZdZdZy)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   rA  rA    s     GO1HLIEHr   rA  c                   x    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y)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 2021r,  r   iO
  r   r-  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                 $    | j                  |      S r5  r6  r7  s     r   r   zIflixEpisodeIE._real_extract  r8  r   N)	r   r   r   r   rA  r   r   r   r   r   r   r   rD  rD    s    G,,/iiJ K1=A>9"#
  A11A>,"#
F@*r   rD  c                   X    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y)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                 .    | j                  |t              S r5  )r$  rD  r7  s     r   r   zIflixSeriesIE._real_extract  s    ##C88r   N)r   r   r   rA  r   r   r   r   r   r   r   rL  rL    sZ    ,,/WWJ O#&A

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

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