
    V|h2                         S SK r S SKrS SKrS SKrSSKJr  SSKJr  SSKJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJr   " S S	\5      r " S
 S\5      r " S S\5      rg)    N   )InfoExtractor   )
websockets)ExtractorErrorUserNotLive
clean_htmlfloat_or_noneget_element_by_classget_element_by_idparse_duration	qualities
str_to_inttry_getunified_timestampupdate_url_queryurl_or_noneurlencode_postdataurljoin)traverse_objc                       \ rS rSrSrSSS.rSSSS	S
SSSSSS\S.
SS0S.SSS	SSSSSSS\S.
SSS.S.S S!S	S"S#S$S%S&SS'\S(.
SS0S./rS) rS* r	S+r
g,)-TwitCastingIE   z^https?://(?:[^/?#]+\.)?twitcasting\.tv/(?P<uploader_id>[^/?#]+)/(?:movie|twplayer)/(?P<id>\d+)https://twitcasting.tvhttps://twitcasting.tv/)OriginRefererz1https://twitcasting.tv/ivetesangalo/movie/2357609 745243cad58c4681dc752490f7540d7f2357609mp4zLive #2357609ivetesangaloz4Twitter Oficial da cantora brasileira Ivete Sangalo.zre:^https?://.*\.jpg$20110822i8QN    )
idexttitleuploader_iddescription	thumbnailupload_date	timestampduration
view_countskip_downloadT)urlmd5	info_dictparamsz2https://twitcasting.tv/mttbernardini/movie/36897403689740zLive playing something #3689740mttbernardiniz$md5:1dc7efa2f1ab932fcd119265cebeec6920120211i(6Oi  abc)r.   videopassword)r/   r1   r2   z2https://twitcasting.tv/loft_heaven/movie/685979292	685979292uv   【無料配信】南波一海のhear/here “ナタリー望月哲さんに聞く編集と「渋谷系狂騒曲」”loft_heavenz$md5:3a0c7b53019df987ce545c935538bacf20210604i`i4  )
r$   r%   r&   r'   r(   r*   r+   r)   r,   r-   c                      U R                  X5      $ ! [         a     Of = f[        R                  " US S S2   5      nU R                  X25      $ )N)_parse_jsonr   base64	b64decode)selfdmpvideo_iddecodeds       V/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/twitcasting.py_parse_data_movie_playlist(TwitCastingIE._parse_data_movie_playlistY   sU    	##C22 		 ""3tt9-22s    
  c                 B  ^ ^^ T R                  U5      R                  5       u  nmT R                  UT5      u  mnT R                  S5      nS nU(       a5  [	        SU0T R                  T5      ESS9nT R                  UTUSS0SS9u  mnUR                  U:w  a&  U(       a  T R                  UR                  TUSS0S	S9m[        R                  " S
T5      (       a
  [        SSS9e[        [        ST5      5      =(       d    T R                  SS/TSS9n[        TU U4S j[        5      n[!        US5      =(       d    T R#                  T5      n[        [        ST5      5      =(       d    T R                  / SQT5      n	[        US 5      =(       d    [%        [        ['        ST5      5      5      n
[)        T R+                  STSS 5      5      n[-        T R+                  STSS 5      5      n[/        U4S jS 5       5      nUU	UUUU
UUS.nU 4S jn[        TU[        5      =(       d    [!        US 5      nU(       GaK  T R1                  S!TS"US#S$S%.S&9nU(       a4  S'[2        R4                  " UR7                  5       5      R9                  5       0OS n/ n[;        / S(Q5      n[!        US)S*[<        R>                  1S+ 45       H;  u  nnURA                  [C        UU5      S,U 3S-U" U5      S.T RD                  S/.5        M=     [F        (       ab  [;        / S0Q5      n[!        US1S*[<        R>                  1S2 45       H1  u  nnURA                  [C        UU5      S3U 3S-U" U5      S4S5S6.5        M3     U(       d  T RI                  5         US7S8.nOU(       d  [        S95      e[K        U5      S::X  a/  T RM                  US;   TS-T RD                  S<9nUT RD                  S=.nO;S>[O        U5       VVs/ s H  u  nnT S?U 3US-S.T RD                  S@.UEPM!     snnSA.nSBT0UEUE$ s  snnf )CNr7   passwordzutf-8)encodingr   r   zTrying video password)dataheadersnotezRetrying authenticationz7<form\s+method="POST">\s*<input\s+[^>]+?name="password"zFThis video is protected by a password, use the --video-password optionT)expected
movietitlezog:titleztwitter:title)fatalc           	      N   > TR                  TR                  SU SS S9T5      S   $ )Nz!data-movie-playlist=\'([^\']+?)\'zmovie playlistdefault2)rE   _search_regex)xr@   rB   s    rD   <lambda>-TwitCastingIE._real_extract.<locals>.<lambda>   s:    d55d6H6H4#T 7I 734<>>AC    )r   thumbnailUrlauthorcomment)r(   zog:descriptionztwitter:descriptionc                 ,    [        S U  5       5      S-  $ )Nc              3   V   #    U  H  n[        UR                  S 5      5      v   M!     g7f)r,   N)r
   get).0ys     rD   	<genexpr>@TwitCastingIE._real_extract.<locals>.<lambda>.<locals>.<genexpr>   s$     8ecd^_quuZGX9Y9Ycds   ')i  )sum)rU   s    rD   rV   rW      s    S8ecd8e5ehl5lrX   ztw-player-duration-time)zTotal\s*:\s*Views\s*([\d,]+)u    総視聴者\s*:\s*([\d,]+)\s*</viewsz)data-toggle="true"[^>]+datetime="([^"]+)"datetimec              3   4   >#    U  H  nS U 3T;   v   M     g7f)zdata-N )r^   rU   webpages     rD   r`   .TwitCastingIE._real_extract.<locals>.<genexpr>   s     r6qaSkW,6qs   )zis-onlive="true"zlive-type="live"zstatus="online")r&   r(   r)   r+   r'   r,   r-   is_livec                 @   > TR                  SU SSS S9nU(       a  U/$ g )Nz-data-movie-url=(["\'])(?P<url>(?:(?!\1).)+)\1zm3u8 urlr/   )grouprR   )rT   )rU   data_movie_urlr@   s     rD   find_dmu-TwitCastingIE._real_extract.<locals>.find_dmu   s7    !//@:UD 0 :N &'' rX   ).sourcer/   z'https://twitcasting.tv/streamserver.phpzDownloading live infoclientpc_web)targetmodeplayer)queryword)lowmediumhighztc-hlsstreamsc                     [        US   5      $ Nr   r   _vs     rD   rV   rW      s    AaD@QrX   zhls-r    m3u8)r/   	format_idr%   qualityprotocolhttp_headers)basemobilesourcemainllfmp4c                     [        US   5      $ r|   r}   r~   s     rD   rV   rW      s    KPQRSPTDUrX   zws-iwebsocket_frag)r/   r   r%   r   source_preferencer   )ro   )formats_format_sort_fieldszFailed to get m3u8 playlistr   r   )rK   )r   r   multi_video-)r$   r/   r%   r   r   )_typeentriesr$   )(_match_valid_urlgroups_download_webpage_handle	get_paramr   _hidden_inputsr/   _download_webpageresearchr   r	   r   _html_search_metar   listr   _og_search_thumbnailr   r   r   rT   r   any_download_jsonhashlibr0   encode	hexdigestr   dictitemsappendr   _M3U8_HEADERSr   raise_login_requiredlen_extract_m3u8_formats	enumerate)r@   r/   r'   urlhvideo_passwordrequest_datar&   video_js_datar)   r(   r,   r-   r+   ri   	base_dictrm   	m3u8_urlsstream_datapassword_paramsr   qqr   m3u8_urlrs   ws_urlinfodictnumrB   rg   s   `                          @@rD   _real_extractTwitCastingIE._real_extractc   s    $ 5 5c : A A CX55c8D8-N/%%g./  !L !99XL!#;<, : .MGT 88s?|,,(!#;<. - 0G
 99OQXYY !itxyy-lGDE _**J+H'Y]*^ 	  CDH	J !0CDjHaHabiHj	 !2W"& ' O*.*@*@Dg+O 	 M+lm l%j1EF_ah1i&jk 	 2 2RT[]dfj!l m
%d&8&88Z'' (	 r6qrr &""& $	
		( Wh5 L$]4JK 	 --91)$&: . K   N$9$9$;<FFH%)  G45B%1+)djj\3Q@ &! +HoF#'y!1 !'{ &$($6$6  & z?@$0i$**7U? %LD& NN/H'*4&\$#%d8-0$4$ % ))+ #'3H  !>??^q 00!ht7I7I 1 KG # $ 2 2H ' *39)=	? *>osH &Jau-#  !'$($6$6	  	 *>	?H (

 
 	
	?s   '&Prf   N)__name__
__module____qualname____firstlineno__
_VALID_URLr   int_TESTSrE   r   __static_attributes__rf   rX   rD   r   r      s    rJ*,M
 C1$)Q1%#
 T
& D6*A1%#
 ""
& D N(A%#1
 T
I5Fn3S
rX   r   c                   2    \ rS rSrSrSSS.SSS./rS	 rS
rg)TwitCastingLiveIE   zBhttps?://(?:[^/?#]+\.)?twitcasting\.tv/(?P<id>[^/?#]+)/?(?:[#?]|$)z#https://twitcasting.tv/ivetesangaloTr/   only_matchingz#https://twitcasting.tv/c:unusedliver   )r/   expected_exceptionc           
         U R                  U5      nU R                  SU SU S35        [        U R                  SU 3USSSS9S	[        145      nUSL a	  [        US
9eU R                  SU S3US5      nU=(       d    U R                  SUSSS9nU R                  SUSS SS9nU(       a  U(       d	  [        US
9eU R                  SU SU 3[        5      $ )NzDownloading live video of user z. Pass "https://twitcasting.tv/z/show" to download the historyz.https://frontendapi.twitcasting.tv/watch/user/zChecking live statusrX   F)rJ   rO   ri   )rB   r   z/show/zDownloading live historyzL(?s)(<span\s*class="tw-movie-thumbnail2-badge"\s*data-status="live">\s*LIVE)zis live?rQ   zM(?s)<a\s+class="tw-movie-thumbnail2"\s+href="/[^/"]+/movie/(?P<video_id>\d+)"zcurrent live IDrB   )rR   rk   z/movie/)
	_match_id	to_screenr   r   boolr   r   rT   
url_resultr   )r@   r/   r'   ri   rg   current_lives         rD   r   TwitCastingLiveIE._real_extract  s-   nnS)-k] ;,,7=8VX	Y t22<[MJ/c  3  HJSVZU[I\^ e{33 ((%k]&9;Hbd 0T//[Z 0 0 ))\&J * H l{33!8W\N[]jkkrX   rf   N)r   r   r   r   r   r   r   r   rf   rX   rD   r   r      s,    VJ4 5+FlrX   r   c                   @    \ rS rSrSrSSSS.SS.S	S
S./rS rS rSrg)TwitCastingUserIEi  zShttps?://(?:[^/?#]+\.)?twitcasting\.tv/(?P<id>[^/?#]+)/(?:show|archive)/?(?:[#?]|$)z/https://twitcasting.tv/natsuiromatsuri/archive/natsuiromatsuriznatsuiromatsuri - Live History)r$   r&      )r/   r1   playlist_mincountz'https://twitcasting.tv/noriyukicas/showTr   c           
   #     #    SU S3=p#[         R                  " S5       H  nU R                  X1SS0SU 3S9n[        R                  " SU5      nU H.  nU R                  [        X'R                  S	5      5      5      v   M0     U R                  S
[        R                  " U5      U4-  USS S9n[        X#5      nU(       a  M    g    g 7f)Nr   z/showr   filter	watchablezDownloading page )ru   rL   zH(?s)<a\s+class="tw-movie-thumbnail2"\s+href="(?P<url>/[^/"]+/movie/\d+)"r/   z<a href="(/%s/show/%d-\d+)[?"]znext urlrQ   )
	itertoolscountr   r   finditerr   r   rk   rT   escape)r@   r'   base_urlnext_urlpage_numrg   matchesmobjs           rD   _entriesTwitCastingUserIE._entries-  s      7}EJJ!*H,,h-DM^_g^hKi - kGkk[]dfGoogh

58I&JKK   ))1RYY{5KX4VVT * 3H x2H8 +s   B=CCc                 l    U R                  U5      nU R                  U R                  U5      X" S35      $ )Nz - Live History)r   playlist_resultr   )r@   r/   r'   s      rD   r   TwitCastingUserIE._real_extract>  s:    nnS)##MM+&}O5TV 	VrX   rf   N)	r   r   r   r   r   r   r   r   r   rf   rX   rD   r   r     s>    gJ@#5
 ! 9
F"VrX   r   )r>   r   r   r   commonr   dependenciesr   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r   r   r   rf   rX   rD   <module>r      sa       	 ! %    " +Z
M Z
z#l #lL"V "VrX   