U
    g>                     @   sd   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mZ ddlmZ G dd deZdS )	    N   )InfoExtractor   )
ExtractorError
clean_htmlfilter_dictget_element_by_idint_or_nonejoin_nonempty
js_to_json	qualitiesurl_or_noneurljoin)traverse_objc                   @   sj   e Zd ZdZdddddddd	d
ddddddddddd
dddddgZdddZdd Zdd ZdS )KukuluLiveIEz1https?://live\.erinn\.biz/live\.php\?h(?P<id>\d+)z*https://live.erinn.biz/live.php?h675134569Z e380fa6a47fc703d91cea913ab44ec2eZ	675134569mp4u   プロセカu*   テストも兼ねたプロセカ配信。i||eZ20231216zre:^https?://.*)idexttitledescription	timestampZupload_date	thumbnail)urlmd5Z	info_dictz*https://live.erinn.biz/live.php?h102338092Z dcf5167a934b1c60333461e13a81a6e2Z	102338092u   Among Usで遊びます！！uK   VTuberになりましたねんねこ㌨ですよろしくお願いしますi-eZ20240107z*https://live.erinn.biz/live.php?h878049531T)r   Zonly_matchingNc              
   C   sT   ||r
dnd7 }| j d|d| dd| dt|d| d|d	d
}tj|S )Nz (force_h264) z.https://live.erinn.biz/live.player.fplayer.phpzDownloading z quality metadatazUnable to download getZ
liveByAjax)hashaction
force_h264query)_download_webpager   urllibparseparse_qs)selfvideo_iddesccoder   qs r*   ?/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/kukululive.py_get_quality_meta2   s     
 

zKukuluLiveIE._get_quality_metac                 C   s   t |ddthf}t |ddthf}td|}t |ddthfr`|||d d d||d t |ddthfr|t|d	|d d d
d|d d S )Nvcodecr   Znow_quality)lowZh264highZhlsaddrr   )Z	format_idr   r   r-   qualityZhlsaddr_audioonlyZ	audioonlyZm4anone)r   strr   r   appendr
   )r%   formatsquality_metar-   r0   Zquality_priorityr*   r*   r+   _add_quality_formats>   s&    

z!KukuluLiveIE._add_quality_formatsc           
   
      sf  |  || |}d|kr*tdddttd|dddd	| d
| | ddg|| jd|dddrg }dD ]R\}}| ||}| 	|| |dkr~t
|ddkr~| 	|| j||dd q~ d|dS | jddddid}t
| jd|ddtd d!d" }d( fd#d$	}	t|d%krNt|	|dd&S | j|	| dd'S ))Nu8   >タイムシフトが見つかりませんでした。<zThis stream has expiredT)expectedZ	livetitlez<SPANz<spanzSPAN>zspan>Descriptionzog:imageztwitter:imagez(var\s+timeshift\s*=\s*false)zis livestreamF)default))r/   Z)r.   ZForceLowr/   )r-   r   ZHEVC1)r   )r   r   r   r   Zis_liver4   z1https://live.erinn.biz/live.timeshift.fplayer.phpzDownloading player htmlzUnable to download player htmlr   r   zvar\s+fplayer_source\s*=zstream dataz\[(?s:.+)\])Zcontains_patternZtransform_sourcec                 S   s   |d S )Nfiler*   )_vr*   r*   r+   <lambda>x       z,KukuluLiveIE._real_extract.<locals>.<lambda>c              
   3   sr   t | dD ]b\}}|r$ d| n|r: d| dn t|dthftd|d dd	d
gdV  q
d S )Nr   r=   z (Part )Z
time_startzhttps://live.erinn.bizr<   r   Zm3u8_native)r   r   protocol)r   r   r   r   r   r4   )	enumerater   r	   r   )segmentsplaylistisegmentr   r   r   r&   r*   r+   entriesz   s    z+KukuluLiveIE._real_extract.<locals>.entriesr   )rE   )Zmulti_video)T)Z	_match_idr!   r   r   r   replaceZ_html_search_metaZ_search_regexr,   r6   r   Z_search_jsonr   lennextZplaylist_result)
r%   r   htmlr4   r'   r(   r5   Zplayer_htmlsourcesrI   r*   rH   r+   _real_extractS   s^    
 
       zKukuluLiveIE._real_extract)N)__name__
__module____qualname__Z
_VALID_URLZ_TESTSr,   r6   rO   r*   r*   r*   r+   r      s<   
r   )urllib.parser"   commonr   utilsr   r   r   r   r	   r
   r   r   r   r   Zutils.traversalr   r   r*   r*   r*   r+   <module>   s   0