U
    g	+                     @   s\   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mZ G dd deZdS )    N   )AdobePassIE   )ExtractorErrordetermine_extfix_xml_ampersandsfloat_or_noneint_or_noneparse_durationstrip_or_noneupdate_url_queryurl_or_none
xpath_attr
xpath_textc                   @   s<   e Zd Zi Zdd ZdddZi i dfddZdd	d
ZdS )TurnerBaseIEc                 C   s   t t|ddS )NZdateCreatedZuts)r	   r   )self
video_data r   ;/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/turner.py_extract_timestamp   s    zTurnerBaseIE._extract_timestampNc                 C   s   |  d|dd }| j|}|sd|i}|r:|| n||d< |drl| |d ||d |d |d	< | j|||d
}	t|	d}
|
rt|
ddt|	d}|s|S || j|< |d | S )Nzhttps?://[^/]+(.+/)zsecure path*pathZvideoIdZauth_requiredurlZ	site_nameZaccessToken)queryz	error/msgT)expectedtoken?hdnea=)Z_search_regex_AKAMAI_SPE_TOKEN_CACHEgetupdateZ_extract_mvpd_auth_download_xmlr   r   )r   tokenizer_src	video_url
content_idap_dataZcustom_tokenizer_queryZsecure_pathr   r   auth	error_msgr   r   r   _add_akamai_spe_token   s0     
   


z"TurnerBaseIE._add_akamai_spe_tokenFc                 C   sF  | j ||dd |d}|si S |jd }t|ddd}t|dpB|}g }	g }
g }i }td	}|d
D ]}t|j }|sqht	|}|
drqhnt|
dr|d}|sqh| |d |d | ||}n<td|s|||di }|d}|sqh|| }||	krqh|	| |d}|dkrP|dg ||d qh|dkrl|||d qh|dkr|
| j||dd qhtd|r|
| |||di ddd qh|dkr&| j||d |pd!dd"}d|krd#|kr|D ]}d$d%d&gi|d'< q|
| qh|dkrZ|
| jt|d(d)i||pNd*dd+ qh|||d,}||}|r|t|d-t|d.t|dd/ njt|tr| rt||d0< nFtd1|}|r|d2d3kr |d4d5d6 nt|d2|d0< |
| qh|d7D ]}|d8D ]r}t|d9}|r6|d:r^q6|d;px|d<pxd}||g |d=d>d?d@|dAdB q6q(|dCdD |dED  t|dFdGk}|||
||t|dHtt|dIt t|dJp
t|dK| !|t"|dLdMt|dNtt|dOtt|dP|dQS )RNc                 S   s   t |  S )N)r   strip)sr   r   r   <lambda>4       z0TurnerBaseIE._extract_cvp_info.<locals>.<lambda>)Ztransform_sourcefatalidZheadlineT)r,   Z	contentIdz=(?P<width>[0-9]+)x(?P<height>[0-9]+)(?:_(?P<bitrate>[0-9]+))?z.//filez/mp4:protected/z/secure/securer!   	media_srcz	https?://defaultZbitrate)sccZsrtvtten)extr   Zpng)r-   r   ZsmilFz#https?://[^/]+\.akamaihd\.net/[iz]/Zf4mhostzpmd.cdn.turner.com)hdshttpZm3u8mp4hls)m3u8_idr,   r   Zffmpeg_argsz	-seekable0Zdownloader_optionsZhdcorez3.7.0r6   )Zf4m_idr,   )	format_idr   r4   widthheight)r=   r>   tbrr?   zios_(audio|[0-9]+)$r   audiononeZm4a)Zvcodecr4   zclosedCaptions/sourcetrackr   z/biglanglabelr1   r2   tt)r1   ZwebvttZsmptettformat)r   r4   c                 s   sB   | ]:}| d p| d|jt| dt| ddV  qdS )Zcutnamer=   r>   )r-   r   r=   r>   N)r   textr	   ).0imager   r   r   	<genexpr>   s   z1TurnerBaseIE._extract_cvp_info.<locals>.<genexpr>zimages/imageZisLivetrueZposterdescriptionlengthZtrtZmetasversionZ	showTitleZseasonNumberZepisodeNumber)r-   titleformats	subtitles
thumbnailsZ	thumbnailrM   duration	timestampZupload_dateZseriesZseason_numberZepisode_numberis_live)#r    attribr   recompilefindallr   rH   r(   r   
startswithr   r'   matchappend
setdefaultextendZ_extract_smil_formatsZ_extract_akamai_formats_extract_m3u8_formatsZ_extract_f4m_formatsr   searchr   intgroupr	   
isinstancestrisdigitendswithr   r
   r   r   )r   Zdata_srcZvideo_idZ	path_datar$   r,   r   rP   r#   urlsrQ   rS   rR   ZrexZ
video_filer"   r4   Zsecure_path_dataZbase_path_datar/   r<   Zm3u8_formatsfZmobjsourcerB   Z	track_urlrC   rV   r   r   r   _extract_cvp_info1   s"    




 








  
 
   
  




	

zTurnerBaseIE._extract_cvp_infoc                 C   s  | d}| d| d|d d }d }g }g }dD ]}	| |	i }
|
 dpX|
 d}|s`q6|
 d	d
kr| d|||p~i |}|| j||dd|dd t|
 d}|s6|s6|
 dg D ]F}t| d}t| d}|d ks|d krq|||| d qq6|||dS )NrV   zhttp://medium.ngtv.io/media/z/tvZmediatv)ZunprotectedZbulkaesZ	secureUrlr   ZplaylistProtectionZspez$http://token.ngtv.io/token/token_sper8   r9   F)r:   Zliver,   ZtotalRuntimeZcontentSegmentsstartrT   )
start_timeZend_time)rQ   chaptersrT   )r   Z_download_jsonr'   r_   r`   r   r]   )r   Zmedia_idZtokenizer_queryr$   rV   Zstreams_datarT   ro   rQ   Zsupported_typeZstream_dataZm3u8_urlZchapterrn   Zchapter_durationr   r   r   _extract_ngtv_info   s`    

        zTurnerBaseIE._extract_ngtv_info)N)N)__name__
__module____qualname__r   r   r'   rk   rp   r   r   r   r   r      s   
 *r   )rX   Z	adobepassr   utilsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   <module>   s   4