U
    g1                     @   s   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 deZG d	d
 d
eZG dd deZdS )    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                   @   s   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(d) Zd*d+ Zd,S )-TwitCastingIEz^https?://(?:[^/?#]+\.)?twitcasting\.tv/(?P<uploader_id>[^/?#]+)/(?:movie|twplayer)/(?P<id>\d+)https://twitcasting.tvhttps://twitcasting.tv/)OriginZRefererz1https://twitcasting.tv/ivetesangalo/movie/2357609Z 745243cad58c4681dc752490f7540d7fZ2357609mp4zLive #2357609Zivetesangaloz4Twitter Oficial da cantora brasileira Ivete Sangalo.zre:^https?://.*\.jpg$Z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/3689740Z3689740zLive playing something #3689740Zmttbernardiniz$md5:1dc7efa2f1ab932fcd119265cebeec69Z20120211i(6Oi  abc)r$   videopassword)r%   r'   r(   z2https://twitcasting.tv/loft_heaven/movie/685979292Z	685979292uv   【無料配信】南波一海のhear/here “ナタリー望月哲さんに聞く編集と「渋谷系狂騒曲」”Zloft_heavenz$md5:3a0c7b53019df987ce545c935538bacfZ20210604i`i4  )
r   r   r   r   r   r    r!   r   r"   r#   c                 C   sD   z|  ||W S  tk
r"   Y nX t|d d d }|  ||S )N)Z_parse_jsonr   base64	b64decode)selfZdmpvideo_iddecoded r1   @/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/twitcasting.py_parse_data_movie_playlistV   s    z(TwitCastingIE._parse_data_movie_playlistc                    s4   | \}|\}d}d }|rjtd|idd}j||ddidd\}|j|kr|rj|j|ddid	dt	d
rt
dddttdpʈjddgdd}tfddt}t|dp}ttdpdddg}	t|dd p8tttd}
tddd }tddd }jd| d d!d"d}tfd#d$d%D }t|d&s|rjd'd( ||	||||
||d) fd*d+}t|tpt|d,p|r d-| d.gnd }|st
d/|r|d0 }j|d1d2djd3}t|d4rl|j|d1d5dd6d5id7jd"d8	 trtd9d:d;g}t|d<pi }| D ],\}}| |d=| d1||d>d?d@ q|dAdB}nTt!|dCkrj|d0 d1jdD}|jdE}n dF fdGdHt"|D dI}dJi |S )KNr*   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)expectedZ
movietitlezog:titleztwitter:title)fatalc                    s      jd| dd dd S )Nz!data-movie-playlist=\'([^\']+?)\'zmovie playlistdefault2)r3   _search_regexx)r.   r/   r1   r2   <lambda>}   s     z-TwitCastingIE._real_extract.<locals>.<lambda>)r   ZthumbnailUrlZauthorcommentr   zog:descriptionztwitter:descriptionc                 S   s   t dd | D d S )Nc                 s   s   | ]}t |d V  qdS )r"   N)r	   get).0yr1   r1   r2   	<genexpr>   s     z@TwitCastingIE._real_extract.<locals>.<lambda>.<locals>.<genexpr>i  )sumr?   r1   r1   r2   rA          ztw-player-duration-time)zTotal\s*:\s*Views\s*([\d,]+)u    総視聴者\s*:\s*([\d,]+)\s*</Zviewsz)data-toggle="true"[^>]+datetime="([^"]+)"datetimez/https://twitcasting.tv/streamserver.php?target=z&mode=clientzDownloading live infoFc                 3   s   | ]}d |  kV  qdS )zdata-Nr1   )rC   r@   )webpager1   r2   rE      s     z.TwitCastingIE._real_extract.<locals>.<genexpr>)zis-onlive="true"zlive-type="live"zstatus="online"llfmp4cookies)method)r   r   r   r!   r   r"   r#   is_livec                    s"    j d| ddd d}|r|gS d S )Nz-data-movie-url=(["\'])(?P<url>(?:(?!\1).)+)\1zm3u8 urlr%   )groupr<   )r>   )r@   Zdata_movie_url)r.   r1   r2   find_dmu   s       z-TwitCastingIE._real_extract.<locals>.find_dmu).sourcer%   r   z/metastream.m3u8zFailed to get m3u8 playlistr   r   hls)r   m3u8_idliver7   )rQ   rP   rP   modezDownloading source quality m3u8)r   rR   rS   queryr8   r7   r:   baseZmobilesourcemain)rJ   streamszws-iZwebsocket_frag)r%   Z	format_idr   ZqualityZsource_preferenceprotocol)rP   )formatsZ_format_sort_fieldsr   )r7   )rZ   http_headersZmulti_videoc                    s0   g | ](\}} d | |ddj d qS )-r   Zm3u8)r   r%   r   rY   r[   )_M3U8_HEADERS)rC   numm3u8_url)	base_dictr.   r/   r1   r2   
<listcomp>   s   	z/TwitCastingIE._real_extract.<locals>.<listcomp>)_typeentriesr   )#Z_match_valid_urlgroupsZ_download_webpage_handle	get_paramr   Z_hidden_inputsr%   _download_webpageresearchr   r   r   Z_html_search_metar   listr   Z_og_search_thumbnailr   r
   r   r>   r   _download_jsonanyZraise_login_requiredZ_extract_m3u8_formatsr]   extendr   r   itemsappendlen	enumerate)r.   r%   r   ZurlhZvideo_passwordZrequest_datar   Zvideo_js_datar   r   r"   r#   r!   Zstream_server_datarM   rO   Z	m3u8_urlsr_   rZ   ZqqrX   rT   Zws_urlZinfodictr1   )r`   r.   r/   rI   r2   _real_extract`   s&   
   
         
              	 zTwitCastingIE._real_extractN)	__name__
__module____qualname__
_VALID_URLr]   int_TESTSr3   rq   r1   r1   r1   r2   r      sp     7
r   c                   @   s,   e Zd ZdZddddddgZdd	 Zd
S )TwitCastingLiveIEzBhttps?://(?:[^/?#]+\.)?twitcasting\.tv/(?P<id>[^/?#]+)/?(?:[#?]|$)z#https://twitcasting.tv/ivetesangaloTr%   Zonly_matchingz#https://twitcasting.tv/c:unusedliver   )r%   expected_exceptionc                 C   s   |  |}| d| d| d t| jd| |ddddd	thf}|dkrZt|d
| d| d|d}|p| jd|ddd}| jd|dd dd}|r|st|d
| 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 statusrG   F)r6   r:   rM   )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?r;   zM(?s)<a\s+class="tw-movie-thumbnail2"\s+href="/[^/"]+/movie/(?P<video_id>\d+)"zcurrent live IDr/   )r<   rN   z/movie/)
	_match_idZ	to_screenr   rj   boolr   rf   r>   
url_resultr   )r.   r%   r   rM   rI   Zcurrent_liver1   r1   r2   rq      sH    
   

       
zTwitCastingLiveIE._real_extractN)rr   rs   rt   ru   rw   rq   r1   r1   r1   r2   rx      s   rx   c                   @   s<   e Zd ZdZdddddddd	d
gZdd Zdd ZdS )TwitCastingUserIEzShttps?://(?:[^/?#]+\.)?twitcasting\.tv/(?P<id>[^/?#]+)/(?:show|archive)/?(?:[#?]|$)z/https://twitcasting.tv/natsuiromatsuri/archive/Znatsuiromatsuriznatsuiromatsuri - Live History)r   r      )r%   r'   Zplaylist_mincountz'https://twitcasting.tv/noriyukicas/showTry   c              	   c   s   d| d }}t dD ]}| j||ddid| d}td|}|D ]}| t||d	V  qJ| jd
t	||f |dd d}t||}|s d S qd S )Nr   z/showr   filterZ	watchablezDownloading page )rU   r8   zH(?s)<a\s+class="tw-movie-thumbnail2"\s+href="(?P<url>/[^/"]+/movie/\d+)"r%   z<a href="(/%s/show/%d-\d+)[?"]znext urlr;   )
	itertoolscountrf   rg   finditerr}   r   rN   r>   escape)r.   r   base_urlZnext_urlZpage_numrI   matchesZmobjr1   r1   r2   _entries  s.          
zTwitCastingUserIE._entriesc                 C   s$   |  |}| | ||| dS )Nz - Live History)r{   Zplaylist_resultr   )r.   r%   r   r1   r1   r2   rq   /  s    
  zTwitCastingUserIE._real_extractN)rr   rs   rt   ru   rw   r   rq   r1   r1   r1   r2   r~     s   r~   )r,   r   rg   commonr   Zdependenciesr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   rx   r~   r1   r1   r1   r2   <module>   s   @ R&