U
    g                     @   st   d dl 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 G dd deZG dd	 d	eZG d
d deZdS )    N   )InfoExtractor   )	ExtractorErrorextract_attributesint_or_nonestr_or_nonetraverse_objtry_callunescapeHTMLurl_basenameurl_or_nonec                   @   s   e Zd Zdd Zdd ZdS )ZaikoBaseIEc                 C   s@   |  ||\}}|j}d|kr(|   nd|kr<tddd|S )Nzzaiko.io/loginz/_buy/0Your account does not have tickets to this eventTexpected)Z_download_webpage_handleurlZraise_login_requiredr   )selfr   video_idwebpageZurlhZ	final_url r   :/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/zaiko.py_download_real_webpage   s    
z"ZaikoBaseIE._download_real_webpagec                 C   s\   |  d| d||}i }t| D ]0\}}|dr&| j||tdd||dd  < q&|S )Nz(<z[^>]+>):F)Ztransform_sourcefatalr   )Z_search_regexr   items
startswithZ_parse_jsonr   )r   namestringr   Z	page_elemattrskeyvaluer   r   r   _parse_vue_element_attr   s    
   z#ZaikoBaseIE._parse_vue_element_attrN)__name__
__module____qualname__r   r"   r   r   r   r   r      s   	r   c                   @   sH   e Zd ZdZdddddddd	d
dddgddddiddgZdd ZdS )ZaikoIEzAhttps?://(?:[\w-]+\.)?zaiko\.io/event/(?P<id>\d+)/stream(?:/\d+)+z0https://zaiko.io/event/324868/stream/20571/20571Z324868Zmp4ZAIKO STREAMING TESTz2[VOD] ZAIKO STREAMING TEST_20210603(Do Not Delete)Z454z
ZAIKO ZEROig^zre:^https://[\w.-]+/\w+/\w+z
maxcount:2Z20200310z
Tech Housewas_live)idexttitle	alt_titleuploader_iduploaderrelease_timestamp	thumbnail
thumbnailsZrelease_date
categorieslive_statusZskip_downloadZm3u8r   )r   	info_dictparamsskipc                 C   s  |  |}| ||}| d||}| j|d d |dddid}| d||}t|d	thfpbi }t|d
thf}ddddddddddd
|pdd| ddf\}	}
}t|dthfr| 	|d |ddd }nt|dt
hf}|r| j||dddng }|s| j|
|d t|d t
hf| | jd!| |d"dd#pBd$g}|||	d%t|d&d'thfd(d'thfd(d)thfd*d+d,thfd&d-d.d/d0 hfd1t|d2thfd3d4 |D d5S )6Nzstream-pagezstream-accessZvideo_sourcezDownloading player pageZrefererzhttps://zaiko.io/)headersZplayerinitial_event_infostatus)r(   zNo VOD stream URL was foundF)	post_livez"Event VOD is still being processedT)r:   zThis event has endedT)r:   zStream has been disconnectedT)Zis_livez!No livestream URL found was foundF)Zis_upcomingzLive event has not yet startedT)not_livezEvent has been cancelledT)
ZvodZ	archivingZdeletingZdeletederrorZdisconnectedZlive_to_disconnectedliveZwaitingZ	cancelledr;   zUnknown event status ""FZis_jwt_protectedZjwt_token_urlz$Downloading JWT-protected stream URLz+Failed to download JWT-protected stream URLZplayback_urlZendpointT)r=   r   r   Z
poster_urlzhttps://zaiko.io/event/zDownloading event page)r    )r)   formatsr3   eventr   Zprofiler)   streamstart	timestampZgenres.c                 S   s   | pd S )Nr   )xr   r   r   <lambda>p       z'ZaikoIE._real_extract.<locals>.<lambda>)r+   r.   r-   r/   r2   r+   c                 S   s"   g | ]}t |r|t|d qS ))r   r)   )r   r   ).0r   r   r   r   
<listcomp>s   s      z)ZaikoIE._real_extract.<locals>.<listcomp>)r,   r1   )	_match_idr   r"   Z_download_webpager	   dictstrgetboolZ_download_jsonr   Z_extract_m3u8_formatsZraise_no_formatsZ_og_search_thumbnailr   r   )r   r   r   r   Zstream_metaZplayer_pageZplayer_metar8   r9   r3   msgr   Z
stream_urlr@   Zthumbnail_urlsr   r   r   _real_extract;   s    

          


zZaikoIE._real_extractNr#   r$   r%   Z
_VALID_URLZ_TESTSrP   r   r   r   r   r&   %   s&   r&   c                   @   s0   e Zd ZdZdddddddd	gZd
d ZdS )ZaikoETicketIEz>https?://(?:www.)?zaiko\.io/account/eticket/(?P<id>[\w=-]{49})zRhttps://zaiko.io/account/eticket/TZjMwMzQ2Y2EzMXwyMDIzMDYwNzEyMTMyNXw1MDViOWU2Mw==r   z"f30346ca31-20230607121325-505b9e63r'   z5https://media.zkocdn.net/pf_1/1_3wdyjcjyupseatkwid34u)r)   r+   r0   z-Only available with the ticketholding account)r   Zplaylist_countr4   r6   c                    sl     |tfddp |} d|} j fddt|dD ft|ddd	d
fS )Nc                      s   t  dd   ddS )Nr   |-)base64urlsafe_b64decodedecodereplacer   )	ticket_idr   r   rF      rG   z.ZaikoETicketIE._real_extract.<locals>.<lambda>eticketc                    s   g | ]}  |tqS r   )Z
url_resultr&   )rH   rB   )r   r   r   rI      s     z0ZaikoETicketIE._real_extract.<locals>.<listcomp>)Zstreams.r   zticket-detailsZ
event_nameZevent_img_url)r+   r0   )rJ   r
   r   r"   Zplaylist_resultr	   )r   r   r   rZ   r   )r   rY   r   rP      s"    

zZaikoETicketIE._real_extractNrQ   r   r   r   r   rR   w   s   rR   )rU   commonr   utilsr   r   r   r   r	   r
   r   r   r   r   r&   rR   r   r   r   r   <module>   s
   ,R