o
    i                     @   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   sB   |  ||\}}|j}d|v r|   |S d|v rtddd|S )Nzzaiko.io/loginz/_buy/0Your account does not have tickets to this eventTexpected)_download_webpage_handleurlraise_login_requiredr   )selfr   video_idwebpageurlh	final_url r   J/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/zaiko.py_download_real_webpage   s   z"ZaikoBaseIE._download_real_webpagec                 C   s\   |  d| d||}i }t| D ]\}}|dr+| j||tdd||dd  < q|S )Nz(<z[^>]+>):F)transform_sourcefatalr   )_search_regexr   items
startswith_parse_jsonr   )r   namestringr   	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/20571324868mp4ZAIKO STREAMING TESTz2[VOD] ZAIKO STREAMING TEST_20210603(Do Not Delete)454z
ZAIKO ZEROig^zre:^https://[\w.-]+/\w+/\w+z
maxcount:220200310z
Tech Housewas_live)idexttitle	alt_titleuploader_iduploaderrelease_timestamp	thumbnail
thumbnailsrelease_date
categorieslive_statusskip_downloadm3u8r   )r   	info_dictparamsskipc                 C   s  |  |}| ||}| d||}| j|d d |dddid}| d||}t|d	thfp1i }t|d
thf}ddddddddddd
|pRdd| ddf\}	}
}t|dthfrk| 	|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#pd$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.tfd/t|d0thfd1d2 |D d3S )4Nzstream-pagezstream-accessvideo_sourcezDownloading player pagerefererzhttps://zaiko.io/)headersplayerinitial_event_infostatus)r4   zNo VOD stream URL was foundF)	post_livez"Event VOD is still being processedT)rL   zThis event has endedT)rL   zStream has been disconnectedT)is_livez!No livestream URL found was foundF)is_upcomingzLive event has not yet startedT)not_livezEvent has been cancelledT)
vod	archivingdeletingdeletederrordisconnectedlive_to_disconnectedlivewaiting	cancelledrO   zUnknown event status ""Fis_jwt_protectedjwt_token_urlz$Downloading JWT-protected stream URLz+Failed to download JWT-protected stream URLplayback_urlendpointT)rW   r   r   
poster_urlzhttps://zaiko.io/event/zDownloading event page)r    )r5   formatsr@   eventr$   profiler5   streamstart	timestampgenres.)r7   r:   r9   r;   r?   r7   c                 S   s"   g | ]}t |r|t|d qS ))r   r5   )r   r   ).0r   r   r   r   
<listcomp>s   s   " z)ZaikoIE._real_extract.<locals>.<listcomp>)r8   r=   )	_match_idr   r*   _download_webpager	   dictstrgetbool_download_jsonr   _extract_m3u8_formatsraise_no_formats_og_search_thumbnailr   r   filter)r   r   r   r   stream_metaplayer_pageplayer_metarJ   rK   r@   msgr   
stream_urlra   thumbnail_urlsr   r   r   _real_extract;   s~   





zZaikoIE._real_extractNr+   r,   r-   
_VALID_URL_TESTSr{   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-505b9e63r1   z5https://media.zkocdn.net/pf_1/1_3wdyjcjyupseatkwid34u)r5   r7   r<   z-Only available with the ticketholding account)r   playlist_countrC   rE   c              	      sp     |tfddp |} d|} j fddt|dD fi t|ddd	d
fS )Nc                      s   t  dd   ddS )Nr   |-)base64urlsafe_b64decodedecodereplacer   )	ticket_idr   r   <lambda>   s    z.ZaikoETicketIE._real_extract.<locals>.<lambda>eticketc                    s   g | ]}  |tqS r   )
url_resultr.   )rh   rd   )r   r   r   ri      s    z0ZaikoETicketIE._real_extract.<locals>.<listcomp>)streams.r   zticket-details
event_nameevent_img_url)r7   r<   )rj   r
   r   r*   playlist_resultr	   )r   r   r   r   r   )r   r   r   r{      s"   

zZaikoETicketIE._real_extractNr|   r   r   r   r   r   w   s    r   )r   commonr   utilsr   r   r   r   r	   r
   r   r   r   r   r.   r   r   r   r   r   <module>   s    ,R