
    yf                        d dl Z d dlZ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 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  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   )compat_urllib_parse_urlparse)HEADRequest)ExtractorErrorLazyListUnsupportedErrorUserNotLivedetermine_extformat_fieldint_or_nonejoin_nonemptymerge_dicts	qualitiesremove_startsrt_subtitles_timecodestr_or_nonetraverse_objtry_calltry_geturl_or_nonec                       e Zd ZdZdZdZdddddd	Zg d
ZdZdZ	dZ
ed        Zd Zed        Zd Zd Z	 	 ddZd Z	 	 ddZd Zd Zd Zd Zy)TikTokBaseIEzhttps://www.tiktok.com/@%szhttps://www.tiktok.com/)360p540p720p1080pN
musical_lyz34.1.2
20234010200)iidapp_nameapp_versionmanifest_app_versionaid)735114412645005904073511497423433910097351153174894626592c                 :    | j                  ddgt              d   S )Napi_hostnamez#api22-normal-c-useast2a.tiktokv.comie_keyr   )_configuration_argTikTokIE)selfs    9/usr/lib/python3/dist-packages/yt_dlp/extractor/tiktok.py_API_HOSTNAMEzTikTokBaseIE._API_HOSTNAME9   s0    &&BCH ' VVWY 	Y    c                    | j                   | j                  j                         D ci c]'  \  }}|dk7  r|| j                  ||gt              d   ) }}}| j                  dt              xs3 t        j                  | j                  t        | j                              }|D cg c];  }i |t        d t        | j                  |j                  d            D              = c}| _         | j                   sy| j                   j                  d      | _        | j                  d   }| j                  d	   }|d
k(  rd| }nd| d| }| d| _        yc c}}w c c}w )Nr"   r,   r   app_infoc              3   0   K   | ]  \  }}|s	||f  y wN ).0kvs      r1   	<genexpr>z2TikTokBaseIE._get_next_app_info.<locals>.<genexpr>I   s       $#q!\]QF$s   
	/Fr#   r%   r   zcom.zhiliaoapp.musically/zcom.ss.android.ugc.zR (Linux; U; Android 13; en_US; Pixel 7; Build/TD1A.220804.031; Cronet/58.0.2991.0)T)_APP_INFO_POOL_APP_INFO_DEFAULTSitemsr.   r/   randomsample_KNOWN_APP_INFOlendictzipsplitpop	_APP_INFO_APP_USER_AGENT)	r0   keydefaultdefaultsapp_info_listr5   r#   versionpackages	            r1   _get_next_app_infozTikTokBaseIE._get_next_app_info>   s   & %)$;$;$A$A$C C%< T,,S7)H,MaPPH  ''
8'D R==!5!5s4;O;O7PQ  $1#  8 t $'*4+B+BHNNSVDW'X$   #D "",,003>>*-..!78|#1';G+H:Qwi@G")*|}7#s   ,E)A E c                     d| xs d d| S )Nzhttps://www.tiktok.com/@_/video/r8   )user_idvideo_ids     r1   _create_urlzTikTokBaseIE._create_url]   s    )'.S)9
KKr3   c                 0    | j                  d|d|di       S )Nz;<script[^>]+\bid="(?:SIGI_STATE|sigi-persisted-data)"[^>]*>z
sigi state	</script>end_patternrL   )_search_jsonr0   webpage
display_ids      r1   _get_sigi_statezTikTokBaseIE._get_sigi_statea   s*      JG*, ! L 	Lr3   c           
      Z    t        | j                  d|d|di       dt        hf      xs i S )Nz;<script[^>]+\bid="__UNIVERSAL_DATA_FOR_REHYDRATION__"[^>]*>zuniversal datarY   rZ   __DEFAULT_SCOPE__)r   r\   rE   r]   s      r1   _get_universal_dataz TikTokBaseIE._get_universal_dataf   sF    D--JGjlB . P !4&)+ 1 /1	1r3   c           
         | j                  | j                  ddj                  t        j                  dd                   | j                  | j                        }|j                  d      r*| j                  | j                  d|d   j                         | j                  d| j                  d|d	||||| j                  d
d|      S )Nodin_tt 0123456789abcdef   r:   sid_ttzhttps://z
/aweme/v1/r=   zapplication/json)
User-AgentAccept)rV   fatalnoteerrnoteheadersquery)_set_cookier2   joinrA   choices_get_cookies_WEBPAGE_HOSTgetvalue_download_jsonrJ   )r0   eprq   rV   rm   rn   ro   webpage_cookiess           r1   _call_api_implzTikTokBaseIE._call_api_impll   s    ++YOaeh@i8jk++D,>,>?x(T//?8;T;Z;Z["")-););R@8dG"22,>  #  	r3   c                    i |i dddddddt        t        j                         dz        dt        t        j                               d	d
d| j
                  d   d| j
                  d   ddj                  d | j
                  d   j                  d      D              d| j
                  d   d| j
                  d   d| j
                  d   d| j
                  d   ddddddddi dd d!d"d#d$d%d&d'd(d)d*d+d,d-d*d.t        t        j                               t        j                  d/d0      z
  d1d2d3d*d4d d5d6d7d8d9d d:d;d<d=d*d*| j
                  d   d*t        t        j                               | j
                  d>   t        j                  d?d@      dj                  t        j                  dAdBC            dDS )ENdevice_platformandroidosssmixa_rticket  cdidchannel
googleplayr&   r#   version_coderf   c              3   6   K   | ]  }t        |      d   yw)02dNint)r9   r;   s     r1   r<   z0TikTokBaseIE._build_api_query.<locals>.<genexpr>   s     $gAs|_$gs   r$   .version_namemanifest_version_coder%   update_version_code
ab_version
resolutionz	1080*2400dpii  device_typezPixel 7device_brandGooglelanguageenos_api29
os_version13acwifiis_padr!   current_regionUSapp_typenormal
sys_regionlast_install_timeiQ i# timezone_namezAmerica/New_York	residenceapp_languagetimezone_offsetz-14400host_abizarmeabi-v7alocaleac2wifi5guoo1r"   l     *{Y2$ l   `[/MM$0 rg      ri   )carrier_region	op_regionbuild_numberregiontsr"   	device_idopenudid)r   timestruuiduuid4rI   rs   rG   rA   randintrt   )r0   rq   s     r1   _build_api_queryzTikTokBaseIE._build_api_queryy   s   ,
,
y,
 ),
 S	,

 DIIK$./,
 C

%,
 |,
 4>>%(,
 z2,
 BGG$gdnn]>[>a>abe>f$gh,
 DNN=9,
 $T^^4J%K,
 "4>>2H#I,
 $..7,
 +,
  3!,
" 9#,
$ H%,
& ',
( d),
* $+,
, &-,
. c/,
0 d1,
2 3,
4 $5,
6  TYY[!1FNN5'4R!R7,
8 /9,
: ;,
< D=,
> x?,
@ A,
B dC,
D 8E,
F 3G,
H # NN=9diik">>%((;=PQ/AR HIW,
 ,	
r3   c           
         | j                   s3| j                         s#d}|rt        |d      | j                  |       y t	        | j
                        dz   }t        j                  d      D ]O  }	| j                  t        | j                                | j                  |      }
	 | j                  ||
||||      c S  y # t        $ r}t        |j                  t        j                        r|j                  j                   dk(  rmt        |j                  xs |j"                        }| j                         s|r | j                  |       Y d }~ y | j                  | d|	 d| d       Y d }~ d }~ww xY w)	Nz No working app info is availableTexpectedr   r   z. Retrying... (attempt z of ))rI   rQ   r   report_warningrD   r>   	itertoolscountwrite_debugr   r   r|   
isinstancecausejsonJSONDecodeErrorposmsg)r0   rz   rq   rV   rm   rn   ro   message	max_triesr   
real_queryes               r1   	_call_apizTikTokBaseIE._call_api   sK   ~~d&=&=&?8G$Wt<<##G,++,q0	__Q' 	ES01..u5J**2z8UDRYZZ		
 " aggt';';<PQAQ!!''"2QUU3G224 ! //8"''7)3J5'QUV_U``a(bcs%   &C  	E9	BE4E43E44E9c                     | j                  ddidd      j                  d      xs g }t        fd|D        d       }|st        d	      | j	                  |      S )
Nfeedaweme_idzDownloading video feedzUnable to download video feedrn   ro   
aweme_listc              3   ^   K   | ]$  }t        |j                  d             k(  s!| & yw)r   N)r   rw   )r9   awemer   s     r1   r<   z2TikTokBaseIE._extract_aweme_app.<locals>.<genexpr>   s'     duS:AV=W[c=cUds   "--Unable to find video in feedrV   )r   rw   nextr   _parse_aweme_video_app)r0   r   	feed_listaweme_details    `  r1   _extract_aweme_appzTikTokBaseIE._extract_aweme_app   su    NNZ*H;S3 # 558S5FMJL 	 d	dfjk !?(SS**<88r3   c                 >   i }t        |dt              }|D ]  }t        |dt        d      }|s| j                  ||ddd      }|s2|j	                  |j                  d	d
      g       j                  ddj                  d t        |d         D              d        |s|t        |dt              D ]g  }|j                  d      s|j	                  |j                  d      xs d
g       j                  t        |j                  d      d      |d   d       i |s|t        |dt              D ]g  }|j                  d      s|j	                  |j                  d      xs d
g       j                  t        |j                  d      d      |d   d       i |S )N)interaction_stickers.auto_video_caption_infoauto_captions.expected_type)urlurl_list.Fr   get_allzDownloading captionszUnable to download captions)rn   ro   rm   r   r   srtz

c           	   3      K   | ]I  \  }}|j                  d       r3|dz    dt        |d   dz         dt        |d   dz         d|d      K yw)textr   

start_timer   z --> end_timeN)rw   r   )r9   ilines      r1   r<   z.TikTokBaseIE._get_subtitles.<locals>.<genexpr>   s      $^4DHHU[L\ 1ugR 6tL7ID7P QRRWXnost~o  CG  pG  YH  XI  IK  LP  QW  LX  KY  Z$^s   AA
utterances)extdata)videocla_infocaption_infos.r   langcaption_formatweb)r   r   )r   subtitleInfos.UrlLanguageCodeNameFormat)
r   rE   r   ry   
setdefaultrw   appendrs   	enumerater   )r0   r   r   	subtitlescaptions_infocaptioncaption_urlcaption_jsons           r1   _get_subtitleszTikTokBaseIE._get_subtitles   s   	$hx|~$ 	G&w0HXcmrsK..X,BLiqv / xL  Z!>CJJ $^#,\,-G#H$^ ^L 	 '6aquv {{5)$$W[[%8%@D"ELL'4D(EuM"5>N  '6Ueij {{5)$$W[[1C%D%LbQXX'H(=uE"5>Z  r3   c                 T	    |d   }|d   } fdi d i ffd	}g }t        |j                  d            }t        |j                  d            }|j                  d      r0|j                   ||d   dd	t        |d
d      rdnd||d             |j                  d      r{|d   }t        |j                  d            |j                   ||dd|j                  d      rdndz  dxs |t	        fd      xs ||j                  d      rdndd             |j                  d      r|j                   ||d   dd	dd             |j                  d      r|j                   ||d   dd	dd             |j                  dg       D ]m  }	|	j                  d      s|j                   ||	d   |	j                  d      dt        |	d       t        |	d
d      rdnd|	j                  d      d              o  j                  |        j                   j                        j                  d!      }
|
r:|D ]5  } j                  t        |d"         j                  d!|
j                         7 g }d#D ]*  }t        ||d$d%f      D ]  }|j                  ||d&        , |j                  d'      xs i }|j                  d(      xs i }|j                  d)      xs i } j                  t        |d*d+d,d-t        d./      z  }t        |d0t         1      }t        |d2d3t         1      }t        |d4d5d(t         1      }|j                  d6      xr& |j                  d7      d8|j                  d9      z  k(  }|r	|xs d:|}}n$|j                  d7      t        |d(t         hf      }}d+|it        |d;t         hfd;t         hfd<t         hfd=      t        |d>d?d@dAdBt         1      t        |d-t         hfd,t        hfdCt         hdD hfdCt         hfd*t         hfdE      ||t        |j                  dF            xs d |rt#        j$                  dG|      nd | j'                  ||      |t        t        |dHdI      dJK       j)                  dL|v dM|v dN|v O      dPdQ
S )RNr   r   c                     j                  d| ddd      \  }}}}|si d fS ||dk(  rdn|t        |d	      xs d  t        j                        |      d
|fS )Nz>v[^_]+_(?P<id>(?P<codec>[^_]+)_(?P<res>\d+p)_(?P<bitrate>\d+))zurl key)NNNN)idcodecresbitrate)rL   groupbytevc1h265r   scale)	format_idvcodectbrquality)_search_regexr   r   	QUALITIES)url_keyr  r
  r  r  r0   s        r1   parse_url_keyz:TikTokBaseIE._parse_aweme_video_app.<locals>.parse_url_key   s    -1-?-?QSZ#;Cd .@ .f*Iuc7 4x&$)Y$6&E"7$7?449T^^4S9	
  r3   c                 R    t        | d      }|dk(  sd| v rd||dk(  rdn|dd d dS i S )	Nm4a)default_extmp3z-music-zMusic trackaacnone)format_noter   acodecr  widthheight)r   )r   r   s     r1   
audio_metaz7TikTokBaseIE._parse_aweme_video_app.<locals>.audio_meta	  sN    7C c!1  -#&%<%S  : 8::r3   c                     | j                  dd            \  }}|j                  d      dk(  }|rj                  |i       j                  dt        | j                  d                   |   j                  dt        | j                  d                   |j                  j                  |i              |j                  dt        |d d              | j                  d      xs g D cg c]c  }|t        | j                  d	            d
dd|v rdndd|||rdndt	        |j                  d      d|v rdnd |rdnd d      d |      e c}S c c}w )Nr  rf   r  bytevc2r#  r"  r   	data_sizemp4r  zaweme/v1)r   filesizer   r!  source_preferenceir   z(API)z(UNPLAYABLE) )delim)
preferencer   )rw   r   r   updater   )	addradd_metaparsed_metar  
is_bytevc2r   r$  known_resolutionsr  s	         r1   extract_addrz9TikTokBaseIE._parse_aweme_video_app.<locals>.extract_addr  sq   ,TXXi-DEK$2i?J!,,S"5@@;W[W_W_`hWiKjk!#&11';txxPWGX;YZ""#4#8#8b#AB##Hk#cr(.CD *-35  '(=>+5+<R"  * '1db,LL/J#<MSW&0Nd# G S/ 5 5 5s   0A(Er"  r#  	play_addrzDirect video
is_bytevc1is_h265r  h264)r  r   r  r"  r#  download_addrzDownload video%shas_watermarkz, watermarkedrf   c                       t         dz        S )Ng      ?r   )dl_widths   r1   <lambda>z5TikTokBaseIE._parse_aweme_video_app.<locals>.<lambda>@  s    3x&/@+A r3   r*  r'  )r  r   r  r"  r#  r/  play_addr_h264)r  r   r  play_addr_bytevc1bit_rate	gear_namezPlayback videoc                     | d   dz  S )NrB  r   r8   xs    r1   r?  z5TikTokBaseIE._parse_aweme_video_app.<locals>.<lambda>U  s    a
md6J r3   FPS)r  r   r  r  fpsrj   r   )coverai_dynamic_coveranimated_coverai_dynamic_cover_bakorigin_coverdynamic_coverr   .)r	  r   
statisticsauthormusicsec_uidr	  uid	unique_idFr   )hybrid_label.r   r   )matched_songtitle)matched_pgc_soundrW  )rV  rP  )rX  rP  is_original_soundrW  zoriginal sound - %sowner_handleoriginal sounddesccreate_time)rW  description	timestamp
play_count
digg_countshare_countcomment_count
view_count
like_countrepost_countrc  nicknamec                     | r| gS d S r7   r8   rE  s    r1   r?  z5TikTokBaseIE._parse_aweme_video_app.<locals>.<lambda>      !A3  r3   )uploaderuploader_idcreatorsr   
channel_idalbumz
(?:, | & )duration)r;  rp  r   r  PrivatezFriends onlyzFollowers only)
is_privateneeds_subscriptionis_unlisted)r  r
  sizebr)
uploader_urltrackro  artistsformatsr  
thumbnailsrp  availability_format_sort_fields)r   rw   extendr   r   r   _remove_duplicate_formatsru   rv   rr   r   hostnamerx   r   _UPLOADER_URL_FORMATr   r   rerG   extract_subtitles_availability)r0   r   r   
video_infor6  rz  r"  r#  r;  r  auth_cookiefr{  cover_id	cover_url
stats_infoauthor_info
music_infouser_urllabelscontained_music_trackcontained_music_authoris_generic_og_tracknamemusic_trackmusic_authorr$  r>  r5  r  s   `                        @@@@r1   r   z#TikTokBaseIE._parse_aweme_video_app   so   
+!'*
	 		: )+ 	50 JNN734Z^^H56>>+&NN<
;(?(-$0i%9&>D B   >>/*&7M"=#4#4W#=>HNN<,1
WfHg_mop !*U"#ABLf$.NN?$Cb8   >>*+NN<
3C(D-- G  
 >>-.NN<
3F(G0- J   "~~j"5 		G{{;'|GK,@!([!9#3"7,JK(4y):f?E";;u-C   		 	&&w/''(:(:;??I o  !=ah!G!P!PRZ\g\m\mno 
: 	H)*xS6QR 	!!"$# 	 "%%l39r
"&&x06B!%%g.4"
,,[=FeU`KV`e1g h l,IY\] ,13Qad!f!-24SU]mp"r #-..1D"E  #\*..Y`Jaez  ~H  ~L  ~L  M[  ~\  f\  K\"(=(QAQSiK(2w(?j[cfiejZkAlK (!
< 3% &+k];* !
 :** -!0	(
 )*!
 ;(3%0 %}5'#1M0NO&.(3%0) !
( %  !89AT@Lrxx|<RV//hG$#LZIf$gost ..$.#1V#;,6 / 8 $FA!
 !	
r3   c           	      L   |d   }t        |ddt        i       }|j                  d      xs i }|j                  d      xs i }t        |xs |dt        hfd	      }|r| j                  |z  nd }	g }
t        |j                  d
            }t        |j                  d            }t        |ddt        hf      D ]'  }|
j                  | j                  |      d||d       ) t        |dt        hf      D ](  }|
j                  d| j                  |      d||d       * | j                  |
       g }t        |ddt        hf      D ]&  }|j                  | j                  |      ||d       ( d|it        |dt        hfdt        hfddt
        hfdt
        hfd      t        |xs |dt        hd hfdt        hfdt        hfdt        hfdd	      t        |d d!d"d#d$t
        %      t        |d&t        hfd't        hd( hfd)t        hd* hfd+      ||	|
|d,|id-S ).Nr   
authorInforP  )r   rL   rQ  stats)authorSecIdsecUidFr   r"  r#  playAddr)).srcNr)  )r   r   r"  r#  )downloadAddr)downloadr   r  )r  r   r   r"  r#  )Nr   )	thumbnailrI  dynamicCoveroriginCover)r   r"  r#  r	  r\  rp  
createTime)rW  r^  rp  r_  rh  c                     | r| gS d S r7   r8   rE  s    r1   r?  z5TikTokBaseIE._parse_aweme_video_web.<locals>.<lambda>  rj  r3   )uniqueIdrP  )authorIdrS  r	  )rm  r   rk  rl  	playCount	diggCount
shareCountcommentCountrd  r   rW  ro  c                     | xs d S r7   r8   rE  s    r1   r?  z5TikTokBaseIE._parse_aweme_video_web.<locals>.<lambda>  s
    QY$ r3   
authorNamec                     | r| gS d S r7   r8   rE  s    r1   r?  z5TikTokBaseIE._parse_aweme_video_web.<locals>.<lambda>  s    1QC $ r3   )rx  ro  ry  Referer)rn  rw  rz  r{  http_headers)r   rE   rw   r   r  r   r   r   _proto_relative_urlr  r   )r0   r   webpage_urlrV   r  r  r  r  rn  r  rz  r"  r#  play_urldownload_urlr{  	thumb_urls                    r1   _parse_aweme_video_webz#TikTokBaseIE._parse_aweme_video_web  s   !'*
"<xW[egh!%%g.4"
!%%g.4"
!+"=@Y\_[`?akpq
=G4,,z9TJNN734Z^^H56$Z*>RU`Ta1bc 	HNN//9 	 	 )6[^i]j5kl 	LNN'//=  	 	&&w/
%l!VYdXe5g h 	I//	:  	 ( 
< 3% &$j;-@*[M:	*  
 ;6,'#1M0NO&.3cU; 9K=I	9
  
 :)) ,!/	(
 )* 
( :!C5)!C5+>*?@(3%2N1OP( ) 
2 %$$;; 
  	
r3   )TzDownloading API JSONzUnable to download API page)__name__
__module____qualname__r  rv   r  r?   rC   r>   rI   rJ   propertyr2   rQ   staticmethodrW   r`   rc   r|   r   r   r   r  r   r  r8   r3   r1   r   r   !   s    7-M1I   ,	O
 NIOY Y> L LL
1 9=<Y-
^ 487T:9&Ph
TH
r3   r   c                   &   e Zd ZdZde dgZddi 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!ed"ed#eed$d%d%d&d'd(d)d*i dd+dd	d
d,dd,dd-dd.dd/dd0dd1dd2d3d4d5d6d7d6gdddd8dd9d!eeeeg d:d;d<d=d>i dd?dd	d
d@dd@ddAd5dBd7dBgddCddDd3dEdFdGdHdBgddIddJddddKd!eeeedLdMdNi ddOdd	d
dPddPddQd5dRd7dRgddSddTd3dUdFdVddWddXddddYd!ed"eeedZd[d\id]d^i dd_dd	d
d`ddaddbd5dcd7dcgddddded3dfdFdgddhddiddddjdHdcgd!eeeedLdMdki ddldd	d
dmddmddnddoddpdqdrdsdtdFdtdduddvddwd!ed"ed#edxedydzd{i dd|dd}d
d~ddad5dd7dgddddddd3ddHdgdFdddddd!ed"ed#eedddMddi dddd	d
dddd5dd7dgddddddd3ddHdgdFdgddddddd!ed"eeeddddgdddi dddd	d
dddddddddd3dd5dd7dgdHdgdFdgddddddd!ed"eeedddd(ddi ddddd
dddddddddd3dd5dd7dgdHdgdsddFdddddd!ed"eeeddd=dd\dgZd Zy)r/   zMhttps?://www\.tiktok\.com/(?:embed|@(?P<user_id>[\w\.-]+)?/video)/(?P<id>\d+)z,<(?:script|iframe)[^>]+\bsrc=(["\'])(?P<url>r   z>https://www.tiktok.com/@leenabhushan/video/6748451240264420610 736bb7a466c6f0a6afeb597da1e6f5b7r	  6748451240264420610r   r)  rW  z!#jassmanak #lehanga #leenabhushanr^  rp     r#  i   r"  i@  rk  leenabhushanrl  6691488002098119685rw  zdhttps://www.tiktok.com/@MS4wLjABAAAA_Eb4t1vodM1IuTy_cvp9CY22RAb59xqrO0Xtz9CYQJvgXaDvZxYnZYRzDWhhgJmycreatorfacestoriesbyleenabhr  z*re:^https?://[\w\/\.\-]+(~[\w\-]+\.image)?upload_date20191016r_  iP]re  rf  rg  YsrbeatsLehanga)rc  artistro  rx  z404 Not Foundr   md5	info_dictskipzOhttps://www.tiktok.com/@patroxofficial/video/6742501081818877190?langCountry=en 6f3cf8cdd9b28cb8363fe0a9a160695b6742501081818877190z$md5:5e2a23877420bb85ce6521dbee39ba94   i  i  patrox18702747zOhttps://www.tiktok.com/@MS4wLjABAAAAiFnldaILebi5heDoVU6bn4jBWWycX6-9U3xuNPqZ8Wsrn  z7MS4wLjABAAAAiFnldaILebi5heDoVU6bn4jBWWycX6-9U3xuNPqZ8Wsr   patroXrm  20190930i-])z	Evan ToddzJessica Keenan Wynnz	Alice LeezBarrett Wilbert Weedz
Jon EidsonzBig Fun)rf  rg  rc  ry  rx  r   r  r  z<https://www.tiktok.com/@barudakhb_/video/69841386513368384026984138651336838402u.   Balas @yolaaftwsr hayu yu ? #SquadRandom_ 🔥
barudakhb_z$md5:29f238c49bc0c176cb3cef1a9cea9fa66974687867511718913zdhttps://www.tiktok.com/@MS4wLjABAAAAbhBwQC-R1iKoix6jDFsF-vBdfx2ABoDjaZrM9fX6arU3w71q3cOWgWuTXn1soZ7dzLMS4wLjABAAAAbhBwQC-R1iKoix6jDFsF-vBdfx2ABoDjaZrM9fX6arU3w71q3cOWgWuTXn1soZ7drx  z
Boka Dancery  i`   20210712)rf  rg  rc  r   r  z~https://www.tiktok.com/@MS4wLjABAAAATh8Vewkn0LYM7Fo03iec3qKdeCUOcBIouRk1mkiag6h3o_pQu_dUXvZ2EZlGST7_/video/70426929291099865617042692929109986561zSlap and Run!user440922249zSlap And Run7036055384943690754zdhttps://www.tiktok.com/@MS4wLjABAAAATh8Vewkn0LYM7Fo03iec3qKdeCUOcBIouRk1mkiag6h3o_pQu_dUXvZ2EZlGST7_LMS4wLjABAAAATh8Vewkn0LYM7Fo03iec3qKdeCUOcBIouRk1mkiag6h3o_pQu_dUXvZ2EZlGST7_zPromoted Musicia   20211217)rg  rc  skip_downloadTr   r  paramsz?https://www.tiktok.com/@pokemonlife22/video/70596983745676116947059698374567611694z!TikTok video #7059698374567611694rf   pokemonlife22Pokemon6820838815978423302zdhttps://www.tiktok.com/@MS4wLjABAAAA0tF1nBwQVVMyrGu3CqttkNgM68Do1OXUFuCY0CRQk8fEtSVDj89HqoqvbSTmUP2WLMS4wLjABAAAA0tF1nBwQVVMyrGu3CqttkNgM68Do1OXUFuCY0CRQk8fEtSVDj89HqoqvbSTmUP2Wr[  iKa   20220201z:https://www.tiktok.com/@denidil6/video/70657990231306437137065799023130643713u   #denidil#денидилdenidil67046664115636405250zdhttps://www.tiktok.com/@MS4wLjABAAAAsvMSzFdQ4ikl3uR2TEJwMBbB2yZh2Zxwhx-WCo3rbDpAharE3GQCrFuJArI3C8QJr  zHolocron Musicro  z[Wolf Sounds (1 Hour) Enjoy the Company of the Animal That Is the Majestic King of the Nightib   20220217rc  zThis video is unavailabler   r  r  z@https://www.tiktok.com/@_le_cannibale_/video/71399804611320742837139980461132074283r  z!TikTok video #7139980461132074283Antaura_le_cannibale_6604511138619654149zdhttps://www.tiktok.com/@MS4wLjABAAAAoShJqaw_5gvy48y3azFeFcT4jeyKWbB0VVYasOCt2tTLwjNFIaDcHAM4D-QGXFOPzLMS4wLjABAAAAoShJqaw_5gvy48y3azFeFcT4jeyKWbB0VVYasOCt2tTLwjNFIaDcHAM4D-QGXFOPznathan !zgrahamscott canon20220905iiNczre:^https://.+\.(?:webp|jpe?g))rc  r  z;https://www.tiktok.com/@moxypatch/video/7206382937372134662 6aba7fad816e8709ff2c149679ace1657206382937372134662z$md5:1d95c0b96560ca0e8a231af4172b2c0a	MoxyPatch	moxypatch7039142049363379205zdhttps://www.tiktok.com/@MS4wLjABAAAAFhqKnngMHJSsifL0w1vFOP5kn3Ndo1ODp0XuIBkNMBCkALTvwILdpu12g3pTtL4VLMS4wLjABAAAAFhqKnngMHJSsifL0w1vFOP5kn3Ndo1ODp0XuIBkNMBCkALTvwILdpu12g3pTtL4Vzyour worst nightmare20230303i7d
   zre:^https://.+zcount:3)rg  rc  r  r{  r   )r   r  r  expected_warningsz;https://www.tiktok.com/@tatemcrae/video/7107337212743830830 982512017a8a917124d5a08c8ae796217107337212743830830uO   new music video 4 don’t come backkkk🧸🖤 i hope u enjoy !! @musicontiktok	tatemcrae86328792343818240zdhttps://www.tiktok.com/@MS4wLjABAAAA-0bQT0CqebTRr6I4IkYvMDMKSRSJHLNPBo5HrSklJwyA2psXLSZG5FP-LMNpHnJdzLMS4wLjABAAAA-0bQT0CqebTRr6I4IkYvMDMKSRSJHLNPBo5HrSklJwyA2psXLSZG5FP-LMNpHnJdz
tate mcrae20220609iUb   zre:^https://.+\.webprg  rc  r  z6Unavailable via feed API, no formats available via webz>https://www.tiktok.com/@hara_yoimiya/video/7253412088251534594 2ff8fe0174db2dbf49c597a7bef4e47d7253412088251534594r  u   я ред флаг простите #переписка #щитпост #тревожныйтиппривязанности #рекомендации hara_yoimiya6582536342634676230zdhttps://www.tiktok.com/@MS4wLjABAAAAIAlDxriiPWLE-p8p1R_0Bx8qWKfi-7zwmGhzU8Mv25W8sNxjfIKrol31qTczzuLBzLMS4wLjABAAAAIAlDxriiPWLE-p8p1R_0Bx8qWKfi-7zwmGhzU8Mv25W8sNxjfIKrol31qTczzuLBu   лампочкаu	   Øneheartzwatching the stars20230708iKd)rc  rg  r  z<https://www.tiktok.com/@hankgreen1/video/7047596209028074758r   only_matchingc                    | j                  |      j                  dd      \  }}	 | j                  |      S # t        $ r%}d|_        | j                  | d       Y d }~nd }~ww xY w| j                  ||      }| j                  ||ddi      }| j                  ||      x}r?| j                  d       t        |d	d
t        hf      xs d}t        |d	ddt        hf      }n| j                  ||      x}	r>| j                  d       t        |	dd
t        hf      xs d}t        |	d|t        hf      }nb| j                  ||d      x}
rA| j                  d       t        |
ddd
t        hf      xs d}t        |
ddddt        hf      }nt        d      |r|dk(  r| j                  |||      S |dk(  rt        dd      t        d| |      )Nr	  rU   Tz; trying with webpagerk   Mozilla/5.0rp   z$Found universal data for rehydrationzwebapp.video-detail
statusCoder   itemInfo
itemStructzFound sigi state data	VideoPage
ItemModulez{}rL   zFound next.js dataprops	pagePropsz$Unable to extract webpage video datai'  zThis video is privater   z!Video not available, status code r   )_match_valid_urlr  r   r   r   r   rW   _download_webpagerc   r   r   r   rE   r`   _search_nextjs_datar  )r0   r   rV   rU   r   r^   universal_datastatus
video_data	sigi_data	next_datas              r1   _real_extractzTikTokIE._real_extract  s    11#6<<T9M'	=**844 	=AJ1#%: ;<<	= w1((h}@](^!55gxHH>HCD!.3H,Y\X]2^_dcdF%n7LjZfimhn6opJ..wAAYA45!)k<#-OPUTUF%i,4&1QRJ227Hd2SSYS12!)g{LSVRW-XY^]^F%i';
T`cgbh1ijJ !!GHH&A+..z3IIu_ !84HH@IT\]]s   7 	A% A  A%N)r  r  r  
_VALID_URL_EMBED_REGEXr   _TESTSr  r8   r3   r1   r/   r/     s	   aJCJ<qQRL P1
'
5
 8
 >	

 
 d
 S
 
 0
   C
 -
 F
 :
 
 #
  #!
" C#
$ ! +
.  58 a1
'
5
 ;
 A	

 
 c
 S
 
 :
 m
 S
 x
 

 F
 :
  !
" ##
$  n-
: N
'
5
 E
 K	

 
 =
 ?@
 0
   C
 h
 \
 >?
 
 
 F
  :!
" ##
$  )
6 P
'
5
 _
 ?	

 
 ~
 (
 0
   C
 h
 %
 
 
 F
 :
  #!
" ##
$   '
* #D)16 Q
'
5
 8
 2	

 
 y
 
 0
   C
 h
 %
 
 
 F
 :
  	{!
" ##
$  )
6 L
'
5
 .
 4	

 

 0
   C
 &
 r
 r
 
 
 :
 #
 #
  C!
" S#
& ,-2 R
'
5
 8
 2	

 y
 
 (
 0
   C
 h
 
|
 (
 :
 
 #
  #!
" C#
$ !:'
4 M1
'
5
 ;
 A	

 {
 
 
 0
   C
 h
 ./
 %
 :
 
 
  #!
" ##
$   *#+
. ==7< M1
'
5
 f
 l	

 
 .
   C
 h
 |
 
 ~
 %
 :
 
 
  #!
" ##
$   0)
, I5: P1
'
5
   n
   t	

 
 0
   C
 h
 )
 +,
 }
 )
 )
 :
 
  #!
" ##
$ !:)
	8 NCEFN!^r3   r/   c                   r    e Zd ZdZdZdZdddddd	d
gddddddd	d
gddddddd	d
gdgZ	 d Zd Zd Z	y)TikTokUserIEztiktok:userz<https?://(?:www\.)?tiktok\.com/@(?P<id>[\w\.-]+)/?(?:$|[#?])Fz&https://tiktok.com/@corgibobaa?lang=en-   6935371178089399301
corgibobaazre:https://.+_1080x1080\.webp)r	  rW  r  Retryingr   playlist_mincountr  r  z+https://www.tiktok.com/@6820838815978423302   r  zhttps://www.tiktok.com/@memeiQ  79005827461758976memec              #   8  K   |dddddj                  t        j                  t        j                  d            d}t        j                  d      D ]f  }| j                         D ]  }	 | j                  d	||d
| d      } j!                  dg       E d {    |j!                  d      s y |d   |d<   h y # t        $ rO}t        |j                  t        j                        r%|j                  j                  dk(  r||_        Y d }~ d }~ww xY w7 }w)N   r   no_retryrf      ri   )rU   r   
max_cursor
min_cursor
retry_typer   r   z
aweme/postz!Downloading user video list page z"Unable to download user video listr   r   has_morer0  )rs   rA   rt   stringdigitsr   r   RetryManagerr   r   r   r   r   r   r   errorrw   )	r0   r^   rU   usernamerq   pageretry	post_listr   s	            r1   _video_entries_apizTikTokUserIE._video_entries_apiN  s    $!DE
 OOA& 	:D**, 	 $$eX>_`d_e<f D !/ !FI	 !}}\2666==,"+L"9E,	: & !!''4+?+?@QWW[[TUEU&' 	
 7sC   A'D*B=DD"D=	DAD
DDDDc           	   #      K   |D ]8  }i | j                  |      t        j                         dd| d|d    d : y w)NTikTokzhttps://tiktok.com/@rT   r   extractor_key	extractorr  )r   r/   r-   )r0   rU   videosr   s       r1   _entries_apizTikTokUserIE._entries_apih  sZ      	E--e4!)!2%!5gYgeJFWEXY	 	s   ?Ac                    | j                  |      }| j                  ||ddi      }| j                  d|dd       xs |}t        | j	                  |||            }t        |d      }| j                  | j                  ||      |||      S )	Nrk   Ifacebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)r  zsnssdk\d*://user/profile/(\d+)zuser IDr  )r   rP  avatar_largerr   r   )r  )	_match_idr  _html_search_regexr	   r<  r   playlist_resultrC  )r0   r   	user_namer^   rU   rB  r  s          r1   r  zTikTokUserIE._real_extractq  s    NN3'	((ieB
(  ))*KWV_im)n{r{$11'7INO )VW	##D$5$5gv$FQZfo#ppr3   N)
r  r  r  IE_NAMEr  _WORKINGr   r<  rC  r  r8   r3   r1   r"  r"    s    GPJH7'!9

 )\	 ='*9

 )\	 . %9

 )\	%F:&:4
qr3   r"  c                       e Zd Zd Zd Zy)TikTokBaseListIEc              #     K   | j                   |ddddddddj                  t        j                  t        j
                  d	
            i}t        j                  d      D ]  }| j                         D ]&  }	 | j                  | j                  ||d| d      }( j%                  dg       D ]5  }i | j'                  |      t(        j+                         dd|d    d 7 |j%                  d      s y |d   |d<    y # t        $ rO}t        |j                  t        j                        r%|j                  j                   dk(  r||_        Y d }~ d }~ww xY ww)Ncursorr   r      typer)  r   rf   r/  ri   r   zDownloading video list page zUnable to download video listr   r   r>  zhttps://tiktok.com/@_/video/r   r?  r3  )_QUERY_NAMErs   rA   rt   r4  r5  r   r   r6  r   _API_ENDPOINTr   r   r   r   r   r   r7  rw   r   r/   r-   )	r0   list_idr_   rq   r9  r:  r;  r   r   s	            r1   _entrieszTikTokBaseListIE._entries  sg    gaRA!DE
 OOA& 	2D**, 	 $**E:FbcgbhDi ? !/ !AI	 #|R8 11%8%-__%6!)%A%
BSAT#U	  ==,'1E(O)	2 & !!''4+?+?@QWW[[TUEU&' 	s8   A4E7#DA*E	EAEEEEEc                 h    | j                  |      }| j                  | j                  ||      |      S r7   )rG  rI  rV  )r0   r   rU  s      r1   r  zTikTokBaseListIE._real_extract  s.    ..%##DMM'7$CWMMr3   N)r  r  r  rV  r  r8   r3   r1   rN  rN  ~  s    2>Nr3   rN  c                   H    e Zd ZdZdZdZdZdZdddd	id
gdddddid
gdgZy)TikTokSoundIEztiktok:soundzBhttps?://(?:www\.)?tiktok\.com/music/[\w\.-]+-(?P<id>[\d]+)[/?#&]?Fmusic_idzmusic/awemezEhttps://www.tiktok.com/music/Build-a-Btch-6956990112127585029?lang=end   r	  6956990112127585029r&  r'  zBhttps://www.tiktok.com/music/jiefei-soap-remix-7036843036118469381i  7036843036118469381N	r  r  r  rK  r  rL  rS  rT  r   r8   r3   r1   rY  rY    s_    GVJHK!MV '
 )\ T!'
 )\Fr3   rY  c                   >    e Zd ZdZdZdZdZdZdddd	id
gddddgZy)TikTokEffectIEztiktok:effectzDhttps?://(?:www\.)?tiktok\.com/sticker/[\w\.-]+-(?P<id>[\d]+)[/?#&]?F
sticker_idzsticker/awemez7https://www.tiktok.com/sticker/MATERIAL-GWOOORL-1258156r[  r	  1258156r&  r'  z0https://www.tiktok.com/sticker/Elf-Friend-479565Tr  Nr^  r8   r3   r1   r`  r`    sL    GXJHK#MH )
 )\ BFr3   r`  c                   F    e Zd ZdZdZdZdZdZdddd	d
dgddddgZd Z	y)TikTokTagIEz
tiktok:tagz3https?://(?:www\.)?tiktok\.com/tag/(?P<id>[^/?#&]+)Fch_idzchallenge/awemez https://tiktok.com/tag/hello2018'   46294678	hello2018)r	  rW  r&  r'  u=   https://tiktok.com/tag/fypシ?is_copy_url=0&is_from_webapp=v1Tr  c                     | j                  |      }| j                  ||ddi      }| j                  d|d      }| j                  | j	                  ||      ||      S )Nrk   rE  r  z"snssdk\d*://challenge/detail/(\d+)ztag ID)rG  r  rH  rI  rV  )r0   r   r_   r^   tag_ids        r1   r  zTikTokTagIE._real_extract  sl    ^^C(
((jeC
(  (()NPWYab##DMM&*$EvzZZr3   N)
r  r  r  rK  r  rL  rS  rT  r   r  r8   r3   r1   rd  rd    sS    GGJHK%M1 
 )\ OF[r3   rd  c                   F   e Zd ZdZddi dddddd	d
d	ddddddddddddgddddddddddgded eeed!d"d#d$d%i dd&dddd'd
d'dd(dd)dd*dd+dd,dd,gdd-dd.dd/dd0dd,gded eeed!d"d#d1d2i dd3dddd4d
d4ddddddddddddgdd5dd6dd7ddddgded eeed!d"d#d8d9d:dd;dd<d=deeeed>d?d@dAdBi ddCddddDd
dDddddddddddddgddEddFddGddddgded eeed!d"d#gZdHZdIZdJ ZyK)LDouyinIEz3https?://(?:www\.)?douyin\.com/video/(?P<id>[0-9]+)z0https://www.douyin.com/video/6961737553342991651 9ecce7bc5b302601018ecb2871c63a75r	  6961737553342991651r   r)  rW  u-   #杨超越  小小水手带你去远航❤️r^  rk  
6897520xkarl  110403406559rw  zShttps://www.douyin.com/user/MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98rn  7MS4wLjABAAAAEKnfa654JAJ_N5lgZDQluwsxmY0lhfmEYNQBBkwGG98r   u	   杨超越rm  rp  r/  r_  io`r  20210513rx  u   @杨超越创作的原声ry  re  rf  zre:https?://.+\.jpe?gr  r  z0https://www.douyin.com/video/6982497745948921092 15c5e660b7048af3707304e3cc02bbb56982497745948921092u8   这个夏日和小羊@杨超越 一起遇见白色幻想0731chaoyue408654318141572zShttps://www.douyin.com/user/MS4wLjABAAAAZJpnglcjW2f_CMVcnqA_6oVBXKWMpH0F8LIHuUu8-lAz7MS4wLjABAAAAZJpnglcjW2f_CMVcnqA_6oVBXKWMpH0F8LIHuUu8-lAu   杨超越工作室*   i`20210708u"   @杨超越工作室创作的原声z0https://www.douyin.com/video/6953975910773099811 0e6443758b8355db9a3c34864a4276be6953975910773099811u'   #一起看海  出现在你的夏日里   iD|`20210422z0https://www.douyin.com/video/6950251282489675042 b4db86aec367ef810ddd38b1737d2fed6950251282489675042u'   哈哈哈，成功了哈哈哈哈哈哈20210412i@t`)r	  r   rW  rk  r  r_  rl  re  rf  rg  rc  zNo longer availabler  z0https://www.douyin.com/video/6963263655114722595 1440bcf59d8700f8e014da073a4dfea86963263655114722595u8   #哪个爱豆的105度最甜 换个角度看看我哈哈   ik{`20210517zhttps://www.douyin.com/user/%szhttps://www.douyin.com/c           
      
   | j                  |      }t        | j                  d|ddd|id      dt        hf      }|s6t	        d| j                  | j                        j                  d	       
      | j                  |      S )Nz1https://www.douyin.com/aweme/v1/web/aweme/detail/zDownloading web detail JSONz"Failed to download web detail JSONr   F)rq   rm   r   z4Fresh cookies (not necessarily logged in) are needed
s_v_web_idr   )	rG  r   ry   rE   r   ru   rv   rw   r   )r0   r   rV   details       r1   r  zDouyinIE._real_extractf  s    >>#&d11?)+Ox( 2 7 :H$8PR  F!..t/A/ABFF|TTV V **622r3   N)	r  r  r  r  r   r   r  rv   r  r8   r3   r1   rl  rl    s3   GJA1
'
5
 D
 J	

 
 >
 q
 S
 {
 
 
 
 :
 0
 }
  #!
" ##
$   1)
4 B1
'
5
 O
 U	

 
 ,
 q
 S
 +
 -.
 
 
 :
 9
 ,-
  #!
" ##
$   1)
4 B1
'
5
 >
 D	

 
 >
 q
 S
 {
 
 
 
 :
 0
 }
  #!
" ##
$   1)
4 B1'>#%#) 
 &!$ B1
'
5
 O
 U	

 
 >
 q
 S
 {
 
 
 
 :
 0
 }
  #!
" ##
$   1)
yuFl <-M3r3   rl  c                      e Zd ZdZdZdi dddddd	d
ddddede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%i dd&dddd'd
d(dd)dedededddd*dd+dd,dedd-dd.d d'd/d0d1d-id$d2d3d4gZd5 Zy6)7
TikTokVMIEzFhttps?://(?:(?:vm|vt)\.tiktok\.com|(?:www\.)tiktok\.com/t)/(?P<id>\w+)z	vm.tiktokz"https://www.tiktok.com/t/ZTRC5xgJpr	  7170520270497680683r   r)  rW  z$md5:c64f6152330c2efe98093ccc8597871crl  6687535061741700102r  20221127re  rf  rc  rw  zdhttps://www.tiktok.com/@MS4wLjABAAAAObqu3WCTXxmw2xwZ3iLEHnEecEIw7ks6rxWqOqOhaPja9BI7gqUQnjw8_5FSoDXXro  z"Wave of Mutilation: Best of Pixiesr  zre:https://.+\.webp.*rp  r)  r_  i:΂crg  r  Pixiesrx  zWhere Is My Mind?r^  sigmachaddeus	SigmaChad)rk  r  r  z https://vm.tiktok.com/ZTR45GpSF/7106798200794926362z$md5:edc3e7ea587847f8537468f2fe51d074699769587884626841820220608zdhttps://www.tiktok.com/@MS4wLjABAAAAdZ_NcPPgMneaGrW0hN8O_J_bwLshwNNERRF5DxOw2HKIzk0kdlLrR8RkVl1ksrMO   iPkb	Akihitokor[  rk  
akihitoko1r  zhttps://vt.tiktok.com/ZSe4FqkKdTr  c                     | j                  t        |      | j                  |      ddi      j                  }| j	                  |      rt        |      | j                  |      S )Nrk   zfacebookexternalhit/1.1r  )_request_webpager   rG  r   suitabler
   
url_result)r0   r   new_urls      r1   r  zTikTokVMIE._real_extract  sb    ''dnnS1LJc;d ( ffifi 	==!"7++w''r3   N)r  r  r  r  rK  r   r   r  r8   r3   r1   r  r  v  s   ZJG 4
'
5
 ;
 0	

 :
 #
 #
 S
   C
 9
 1
 
 
 C
 h
  (!
" A#
$ ("'
0 2
'
5
 ;
 0	

 :
 #
 #
 S
 1
   C
 
 
 C
 k
 %
  A!
" #
$ {%
. 1[0Fd(r3   r  c                   v    e Zd ZdZdZddddddd	d
ded	ddiddddeddddded	ddddddddgZddZd Z	y) TikTokLiveIEz(?x)https?://(?:
        (?:www\.)?tiktok\.com/@(?P<uploader>[\w.-]+)/live|
        m\.tiktok\.com/share/live/(?P<id>\d+)
    )ztiktok:livez,https://www.tiktok.com/@weathernewslive/live7210809319192726273r)  u(   re:ウェザーニュースLiVE[\d\s:-]*u   ウェザーニュースLiVEweathernewslive6621496731283095554z'https://www.tiktok.com/@weathernewsliveis_live)	r	  r   rW  r  rk  rl  rw  live_statusconcurrent_view_countr  m3u8r  z)https://www.tiktok.com/@pilarmagenta/live7209423610325322522Pilarmagentapilarmagenta6624846890674683909z$https://www.tiktok.com/@pilarmagenta
Livestreamr  z@https://m.tiktok.com/share/live/7209423610325322522/?language=enTr  z&https://www.tiktok.com/@iris04201/liveNc                     t        | j                  ||ddd||i      |t        hfi       }t        |j	                  d            dk(  r|S |st        dd	
      t        |      )NFr&   1988)rm   rq   r  r  r   zThis livestream has endedTr   r   )r   ry   rE   r   rw   r   r   )r0   r   paramroom_idrk  rK   responses          r1   r   zTikTokLiveIE._call_api  sz     3 3vw. !4 ! tfr	+ x||H-.!3O !<tLL8,,r3   c                 V     j                  |      j                  dd      \  }} j                  ||xs |ddi|       }|ra j                  ||xs |      }t	        |dddd	t
        hfd
      xs  j                  d|dd       xs |}|xs t	        |ddd
t              }|st        |      g } j                  dd||d      t        d      } fdt	        ddddhdt        hfi       j                         D ]  \  }}	t	        |	ddhdt        hfd d! hfd"d# hfd$f      }
t	        |	dd%t        hf      }|r!|j                  |d%d&|  ||      d'|
       t	        |	dd(t        hf      }|sx|j                  |d)d*d+|  ||      d,|
        fd-}d.D ]T  }	t	        d|	 d/t        hf      }|s|j                  ||	d(k(  rd)nd%|	d(k(  rd*nd0|	 d1 ||	 d2       |d3      d4       V t	        dd5t        hfi       j                         D ]F  \  }}t        |      s|j                  |d%d&| j                          |d6|       ||      d7       H t	        |d8       s[t!         j                  d9d:||d;            t        j#                  d<            r!|j                  d<   d)d*d=d> |d?      d4       |xs t	        d@dA      }||t%        |d  j&                        xs d dB|dCdDt	        dEdFdt
        hfdGdHt(        hfdId
      S )JNrk  r	  rk   r  )rp   rm   
UserModuleusers.roomIdFr  zsnssdk\d*://live\?room_id=(\d+)zroom IDr  )LiveRoomliveRoomUserInfouserr  )r  r  .r  )r   r   r   z,https://webcast.tiktok.com/webcast/room/infor  r   )rK   )
SD1ldSD2sdHD1hdFULL_HD1uhdORIGIONoriginc                 (    j                  | d       S r7   )_parse_json)rF  r0   s    r1   r?  z,TikTokLiveIE._real_extract.<locals>.<lambda>  s     0 0D 9 r3   
stream_urllive_core_sdk_data	pull_datastream_datamain
sdk_paramsVCodecvbitratec                     t        | d      S )Nr   )r   rE  s    r1   r?  z,TikTokLiveIE._real_extract.<locals>.<lambda>  s    {1d/C r3   r   c                 f    t        j                  d|       j                         j                         S )Nz(?i)\d+x\d+|\d+p)r  matchr  lowerrE  s    r1   r?  z,TikTokLiveIE._real_extract.<locals>.<lambda>  s%    ATVW8X8^8^8`8f8f8h r3   )r  r  r   flvzflv-)r   r   r  r  hlsr)  m3u8_nativezhls-)r   r   protocolr  r  c                  <    t        dg| hdt        h      S )Nr  r  )r   r   )keys	live_infoparse_inners    r1   
get_vcodecz.TikTokLiveIE._real_extract.<locals>.get_vcodec%  sE    	,E#,E&1],E4<,E?Be,E F Fr3   )r  rtmp	_pull_urlhttpsz-pull_pull_url_paramsr  )r   r   r  r  r  r  flv_pull_urlflv_pull_url_params)r   r   r  r  r  c                     |d   dk(  S )Nr   r)  r8   )rS   r;   s     r1   r?  z,TikTokLiveIE._real_extract.<locals>.<lambda>A  s    !E(e2C r3   z'https://www.tiktok.com/api/live/detail/roomIDLiveRoomInfoliveUrlzhls-fallbackr:  r  )	ownerInfor  )ownerr_   T)r  r   )r	  rk  rw  r  rz  r}  rW  r  r  )r  rh  )
user_count)liveRoomStats	userCount)rW  rl  r  r  )r  r  r  r`   r   r   r  r   r   r   r   rE   r@   r   r   r  r   rw   r   r  r   )r0   r   rk  r  r^   r   rz  get_qualityr  streamr  flv_urlhls_urlr  r  f_idf_urlr  r  s   `                @@r1   r  zTikTokLiveIE._real_extract  s6    11#6<<ZN'(($W|].KW^S^ ) ` ''1DWED#D<#xR]Q^*_ino ",,-OQXZcmq,r"!    \<J8%WZ$\H x00NN:IwPX^d # f	   op9+I2Kvv8/8: <<AEG	OGV &fv|k]#cU+"%C$DE+.h-ijU / J #6FEK=+IJG" #'y!1*73	 
 !   #6FEK=+IJG"  -#'y!1*73  !  -	>	F & 
	F%i,6()@TWbVc1deJ%$*eO5175g$*85!1(F83C)DE*95  
	 (	L.SWRX3Yceflln 		KD%u%NN#D6]002$%:DA&t, 		 G%CD#It~~98Wh\j 0> 0l mI9==34$Y/  -!/$*84   j|I7PRij  (49R9RS[W[#5
 9  6{mL?*X[fZg)h	'
 
 	
r3   r7   )
r  r  r  r  rK  r   r   r   r   r  r8   r3   r1   r  r    s    	J G >'@5)0E$%(

 #F+ ;'%&0B$%(

  R 8?"FH-o
r3   r  ))r   r   rA   r  r4  r   r   commonr   compatr   
networkingr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r"  rN  rY  r`  rd  rl  r  r  r8   r3   r1   <module>r     s       	    ! 1 $    *G
= G
Tl^| l^^	aq< aqH"N| "NJ$ 0% ([" [8H3| H3V;( ;(|i
< i
r3   