
    VGh2                         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mZmZmZmZmZmZmZmZ ddlmZ  G d d	e      Z G d
 de      Z G d de      Zy)    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                       e Zd ZdZdddZddddd	d
ddddded
ddiddddddddddded
dddddd dd!d"d#d$d%dd&ed'
ddidgZd( Zd) Zy*)+TwitCastingIEz^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.   r0   r1   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                     	 | j                  ||      S # t        $ r Y nw xY wt        j                  |d d d         }| j                  ||      S )N)_parse_jsonr   base64	b64decode)selfdmpvideo_iddecodeds       e/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/twitcasting.py_parse_data_movie_playlistz(TwitCastingIE._parse_data_movie_playlistY   sY    	##C22 		 ""3tt9-22s    	  c                      j                  |      j                         \  } j                  |      \  } j                  d      }d }|r;t	        d|i j                        d      } j                  ||ddid      \  }|j                  |k7  r$|r" j                  |j                  |ddid	      t        j                  d
      rt        dd      t        t        d            xs  j                  ddgd      }t         fdt              }t!        |d      xs  j#                        }t        t        d            xs  j                  g d      }	t        |d       xs t%        t        t'        d                  }
t)         j+                  ddd             }t-         j+                  ddd             }t/        fddD              }||	||||
||d} fd}t        |t              xs t!        |d       }|r: j1                  d!d"|d#d$d%&      }|r3d't3        j4                  |j7                               j9                         ind }g }t;        g d(      }t!        |d)d*t<        j>                  hd+ f      D ]:  \  }}|jA                  tC        ||      d,| d- ||      d. jD                  d/       < tF        r`t;        g d0      }t!        |d1d*t<        j>                  hd2 f      D ]0  \  }}|jA                  tC        ||      d3| d- ||      d4d5d6       2 |s jI                          |d7d8}n|st        d9      tK        |      d:k(  r2 jM                  |d;   d- jD                  <      }| jD                  d=}n8d>tO        |      D cg c]  \  }} d?| |d-d. jD                  d@|  c}}dA}dBi||S c c}}w )CNr6   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                 T    j                  j                  d| dd             d   S )Nz!data-movie-playlist=\'([^\']+?)\'zmovie playlistdefault2)rD   _search_regex)xr?   rA   s    rC   <lambda>z-TwitCastingIE._real_extract.<locals>.<lambda>   s<    d55d6H6H4#T 7I 734<>>AC     )r   thumbnailUrlauthorcomment)r'   zog:descriptionztwitter:descriptionc                 ,    t        d | D              dz  S )Nc              3   P   K   | ]  }t        |j                  d                yw)r+   N)r
   get).0ys     rC   	<genexpr>z@TwitCastingIE._real_extract.<locals>.<lambda>.<locals>.<genexpr>   s     8e^_quuZGX9Y8es   $&i  )sum)rS   s    rC   rT   z-TwitCastingIE._real_extract.<locals>.<lambda>   s    S8ecd8e5ehl5l rU   ztw-player-duration-time)zTotal\s*:\s*Views\s*([\d,]+)u    総視聴者\s*:\s*([\d,]+)\s*</viewsz)data-toggle="true"[^>]+datetime="([^"]+)"datetimec              3   ,   K   | ]  }d | v   yw)zdata-N )r[   rS   webpages     rC   r]   z.TwitCastingIE._real_extract.<locals>.<genexpr>   s     raSkW,rs   )zis-onlive="true"zlive-type="live"zstatus="online")r%   r'   r(   r*   r&   r+   r,   is_livec                 <    j                  d| ddd       }|r|gS y )Nz-data-movie-url=(["\'])(?P<url>(?:(?!\1).)+)\1zm3u8 urlr.   )grouprP   )rR   )rS   data_movie_urlr?   s     rC   find_dmuz-TwitCastingIE._real_extract.<locals>.find_dmu   s7    !//@:UD 0 :N &'' rU   ).sourcer.   z'https://twitcasting.tv/streamserver.phpzDownloading live infoclientpc_web)targetmodeplayer)queryword)lowmediumhighztc-hlsstreamsc                     t        |d         S Nr   r   _vs     rC   rT   z-TwitCastingIE._real_extract.<locals>.<lambda>   s    AaD@Q rU   zhls-r   m3u8)r.   	format_idr$   qualityprotocolhttp_headers)basemobilesourcemainllfmp4c                     t        |d         S rv   rw   rx   s     rC   rT   z-TwitCastingIE._real_extract.<locals>.<lambda>   s    KPQRSPTDU rU   zws-iwebsocket_frag)r.   r|   r$   r}   source_preferencer~   )ri   )formats_format_sort_fieldszFailed to get m3u8 playlistr   r   )rI   )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   rR   r   any_download_jsonhashlibr/   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*   rd   	base_dictrh   	m3u8_urlsstream_datapassword_paramsr   qqr}   m3u8_urlrm   ws_urlinfodictnumrA   rc   s   `                          @@rC   _real_extractz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 !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  
 ?@$0i$**7U? % LD& NN/H'*4&\$#%d8-0$4$  ))+ #'3H  !>??^q 00!ht7I7I 1 KG # $ 2 2H ' *39)=	? &sH &Jau-#  !'$($6$6	  	 	?H (

 
 	
	?s   0#O!N)	__name__
__module____qualname__
_VALID_URLr   int_TESTSrD   r   rb   rU   rC   r   r      s    rJ*,M
 C1$)Q1%#
 T
& D6*A1%#
 ""
& D N(A%#1
 T
I5Fn3S
rU   r   c                   *    e Zd ZdZddddddgZd Zy	)
TwitCastingLiveIEzBhttps?://(?:[^/?#]+\.)?twitcasting\.tv/(?P<id>[^/?#]+)/?(?:[#?]|$)z#https://twitcasting.tv/ivetesangaloTr.   only_matchingz#https://twitcasting.tv/c:unusedliver   )r.   expected_exceptionc           	         | j                  |      }| j                  d| d| d       t        | j                  d| |ddd      d	t        hf      }|du rt        |
      | j                  d| d|d      }|xs | j                  d|dd      }| j                  d|dd d      }|r|st        |
      | j                  d| d| t              S )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 statusrU   F)rH   rM   rd   )rA   r   z/show/zDownloading live historyzL(?s)(<span\s*class="tw-movie-thumbnail2-badge"\s*data-status="live">\s*LIVE)zis live?rO   zM(?s)<a\s+class="tw-movie-thumbnail2"\s+href="/[^/"]+/movie/(?P<video_id>\d+)"zcurrent live IDrA   )rP   rf   z/movie/)
	_match_id	to_screenr   r   boolr   r   rR   
url_resultr   )r?   r.   r&   rd   rc   current_lives         rC   r   z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krU   N)r   r   r   r   r   r   rb   rU   rC   r   r      s,    VJ4 5+FlrU   r   c                   8    e Zd ZdZdddddddd	d
gZd Zd Zy)TwitCastingUserIEzShttps?://(?:[^/?#]+\.)?twitcasting\.tv/(?P<id>[^/?#]+)/(?:show|archive)/?(?:[#?]|$)z/https://twitcasting.tv/natsuiromatsuri/archive/natsuiromatsuriznatsuiromatsuri - Live History)r#   r%      )r.   r0   playlist_mincountz'https://twitcasting.tv/noriyukicas/showTr   c           
   #     K   d| dx}}t        j                  d      D ]  }| j                  ||ddid|       }t        j                  d|      }|D ].  }| j                  t        ||j                  d	                   0 | j                  d
t        j                  |      |fz  |dd       }t        ||      }|r y  y w)Nr   z/showr   filter	watchablezDownloading page )ro   rJ   zH(?s)<a\s+class="tw-movie-thumbnail2"\s+href="(?P<url>/[^/"]+/movie/\d+)"r.   z<a href="(/%s/show/%d-\d+)[?"]znext urlrO   )
	itertoolscountr   r   finditerr   r   rf   rR   escape)r?   r&   base_urlnext_urlpage_numrc   matchesmobjs           rC   _entrieszTwitCastingUserIE._entries-  s      7}EJJ8!* 	H,,+h-DM^_g^hKi - kGkk[]dfG Loogh

58I&JKKL ))1RYY{5KX4VVT * 3H x2H	s   B?CCc                 n    | j                  |      }| j                  | j                  |      || d      S )Nz - Live History)r   playlist_resultr   )r?   r.   r&   s      rC   r   zTwitCastingUserIE._real_extract>  s<    nnS)##MM+&}O5TV 	VrU   N)r   r   r   r   r   r   r   rb   rU   rC   r   r     s>    gJ@#5
 ! 9
F"VrU   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   rb   rU   rC   <module>r      sa       	 ! %    " +Z
M Z
z#l #lL"V "VrU   