
    yf1                         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  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traverse_objtry_getunified_timestampurlencode_postdataurljoinc                       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,   r.   r/   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       >/usr/lib/python3/dist-packages/yt_dlp/extractor/twitcasting.py_parse_data_movie_playlistz(TwitCastingIE._parse_data_movie_playlistV   sY    	##C22 		 ""3tt9-22s    	  c                 t     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             } j/                  d|z  dd      }t1        fdd D              }t!        |d!      s|r j3                  d"#       ||	||||
||d$} fd%}t        |t              xs t!        |d&      xs |rd'| d(gnd }|st        d)      |r|d*   } j5                  |d+d,d j6                  -      }t!        |d.      r5|j9                   j5                  |d+d/dd0d/id1 j6                  d2	             t:        rVt=        g d3      }t!        |d4      xs i }|j?                         D ]&  \  }}|jA                  |d5|z  d+ ||      d6d7d8       ( |d9d:}nxtC        |      d;k(  r2 j5                  |d*   d+ j6                  <      }| j6                  d=}n8d>tE        |      D cg c]  \  }} d?| |d+d@ j6                  dA|  c}}dB}dCi||S c c}}w )DNr4   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)rB   _search_regex)xr=   r?   s    rA   <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     rA   	<genexpr>z@TwitCastingIE._real_extract.<locals>.<lambda>.<locals>.<genexpr>   s     8e^_quuZGX9Y8es   $&i  )sum)rQ   s    rA   rR   z-TwitCastingIE._real_extract.<locals>.<lambda>   s    S8ecd8e5ehl5l rS   ztw-player-duration-time)zTotal\s*:\s*Views\s*([\d,]+)u    総視聴者\s*:\s*([\d,]+)\s*</viewsz)data-toggle="true"[^>]+datetime="([^"]+)"datetimez=https://twitcasting.tv/streamserver.php?target=%s&mode=clientzDownloading live infoFc              3   ,   K   | ]  }d | v   yw)zdata-N )rY   rQ   webpages     rA   r[   z.TwitCastingIE._real_extract.<locals>.<genexpr>   s     raSkW,rs   )zis-onlive="true"zlive-type="live"zstatus="online"llfmp4cookies)method)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,   )grouprN   )rP   )rQ   data_movie_urlr=   s     rA   find_dmuz-TwitCastingIE._real_extract.<locals>.find_dmu   s7    !//@:UD 0 :N &'' rS   ).sourcer,   r   z/metastream.m3u8zFailed to get m3u8 playlistr   r   hls)r"   m3u8_idliverG   )rk   rj   rj   modezDownloading source quality m3u8)r"   rl   rm   queryrH   rG   rK   )basemobilesourcemain)rb   streamszws-%siwebsocket_frag)r,   	format_idr"   qualitysource_preferenceprotocol)rj   )formats_format_sort_fieldsr   )rG   )ry   http_headersmulti_video-m3u8)r!   r,   r"   rx   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   rP   r   _download_jsonanyraise_login_required_extract_m3u8_formats_M3U8_HEADERSextendr   r   itemsappendlen	enumerate)r=   r,   r$   urlhvideo_passwordrequest_datar#   video_js_datar&   r%   r)   r*   r(   stream_server_datare   	base_dictri   	m3u8_urlsm3u8_urlry   qqrs   rn   ws_urlinfodictnumr?   ra   s   `                         @@rA   _real_extractzTwitCastingIE._real_extract`   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'' (	 "00KkY[c#5 1 2 r6qrr.9g%%Y%7 &""& $	
		( Wh5 i$]4JKiV]3K=@PQRcg 	  !>?? |H00(u4#5#5 1 7G .0ABt99hE8fh%7: ..e	  :  = > ?@&'9;PQWUW$+MMO 	LD&NN%%,t^$#%d8-0$4$ 	 #'3H ^q 00!ht7I7I 1 KG # $ 2 2H ' *39)=	? &sH &Jau-#  !'$($6$6	  	 	?H (

 
 	
	?s   #N4N)	__name__
__module____qualname__
_VALID_URLr   int_TESTSrB   r   r`   rS   rA   r   r      s    rJ*,M
 C1$)Q1%#
 T
& D6*A1%#
 ""
& D N(A%#1
 T
I5Fn3G
rS   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j                  |             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 )NzbDownloading live video of user {0}. Pass "https://twitcasting.tv/{0}/show" to download the historyz.https://frontendapi.twitcasting.tv/watch/user/zChecking live statusrS   F)rF   rK   re   )r?   r   z/show/zDownloading live historyzL(?s)(<span\s*class="tw-movie-thumbnail2-badge"\s*data-status="live">\s*LIVE)zis live?rM   zM(?s)<a\s+class="tw-movie-thumbnail2"\s+href="/[^/"]+/movie/(?P<video_id>\d+)"zcurrent live IDr?   )rN   rg   z/movie/)	_match_id	to_screenformatr   r   boolr   r   rP   
url_resultr   )r=   r,   r$   re   ra   current_lives         rA   r   zTwitCastingLiveIE._real_extract   s$   nnS)MMSVT_M`	b 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krS   N)r   r   r   r   r   r   r`   rS   rA   r   r      s,    VJ4 5+FlrS   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,   r.   playlist_mincountz'https://twitcasting.tv/noriyukicas/showTr   c           
   #     K   d|z  x}}t        j                  d      D ]  }| j                  ||ddid|z        }t        j                  d|      }|D ].  }| j                  t        ||j                  d                   0 | j                  d	t        j                  |      |fz  |d
d       }t        ||      }|r y  y w)Nzhttps://twitcasting.tv/%s/showr   filter	watchablezDownloading page %d)ro   rH   zH(?s)<a\s+class="tw-movie-thumbnail2"\s+href="(?P<url>/[^/"]+/movie/\d+)"r,   z<a href="(/%s/show/%d-\d+)[?"]znext urlrM   )
	itertoolscountr   r   finditerr   r   rg   rP   escape)r=   r$   base_urlnext_urlpage_numra   matchesmobjs           rA   _entrieszTwitCastingUserIE._entries  s     >LL8!* 	H,,+h-DK`ckKk - m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|z        S )Nz%s - Live History)r   playlist_resultr   )r=   r,   r$   s      rA   r   zTwitCastingUserIE._real_extract/  s;    nnS)##MM+&5H;5VX 	XrS   N)r   r   r   r   r   r   r   r`   rS   rA   r   r     s>    gJ@#5
 ! 9
F"XrS   r   )r;   r   r   commonr   dependenciesr   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r`   rS   rA   <module>r      sT      	 ! %   $N
M N
b#l #lL"X "XrS   