U
    $Pfk+                     @   st   d dl m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 G dd	 d	eZdS )
    )unicode_literalsN   )AdobePassIE   )
compat_str)fix_xml_ampersands
xpath_textint_or_nonedetermine_extfloat_or_noneparse_duration
xpath_attrupdate_url_queryExtractorErrorstrip_or_noneurl_or_nonec                   @   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-7zdooeg3/youtube_dl/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   sX  | 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$< q|
| qh|dkrR|
| jt|d%d&i||pFd'dd( qh|||d)}||}|r|t|d*t|d+t|dd, njt|tr
| rt||d-< nFtd.|}|r
|d/d0kr|d1d2d3 nt|d/|d-< |
| qh| |
 |d4D ]}|d5D ]r}t|d6}|r8|d7r`q8|d8pz|d9pzd}||g |d:d;d<d=|d>d? q8q*|d@dA |dBD  t|dCdDk}||r|  |n||
||t|dEt!t|dFt"t|dGpt|dH| #|t$|dIdJt|dKtt|dLtt|dM|dNS )ONc                 S   s   t |  S )N)r   strip)sr   r   r   <lambda>8       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Zm3u8_idr.   r   	_seekableZhdcorez3.7.0r8   )Zf4m_idr.   )	format_idr   r6   widthheight)r?   r@   tbrrA   zios_(audio|[0-9]+)$r   audiononeZm4a)Zvcodecr6   zclosedCaptions/sourcetrackr   z/biglanglabelr3   r4   tt)r3   ZwebvttZsmptettformat)r   r6   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	thumbnailrO   duration	timestampZupload_dateZseriesZseason_numberZepisode_numberis_live)%r"   attribr   recompilefindallr   rJ   r*   r
   
startswithr    r)   matchappend
setdefaultextendZ_extract_smil_formatsZ_extract_akamai_formats_extract_m3u8_formatsZ_extract_f4m_formatsr   searchr!   intgroupr	   
isinstancer   isdigit_sort_formatsendswithZ_live_titler   r   r   r   )r   Zdata_srcZvideo_idZ	path_datar&   r.   r   rR   r%   urlsrS   rU   rT   ZrexZ
video_filer$   r6   Zsecure_path_dataZbase_path_datar1   r>   Zm3u8_formatsfZmobjsourcerD   Z	track_urlrE   rX   r   r   r   _extract_cvp_info5   s$    




 








  
 
   
  





	

zTurnerBaseIE._extract_cvp_infoc              
   C   s  |  d| |d d }d }g }g }dD ]}||i }	|	dpJ|	d}
|
sRq(|	ddkrv| d	|
||ppi |}
|| j|
|d
ddd t|	d}|s(|	dg D ]F}t|d}t|d}|d ks|d krq|||| d qq(| | |||dS )Nz!http://medium.ngtv.io/media/%s/tvZmediatv)ZunprotectedZbulkaesZ	secureUrlr   ZplaylistProtectionZspez$http://token.ngtv.io/token/token_sper:   r;   Fr<   ZtotalRuntimeZcontentSegmentsstartrV   )
start_timeZend_time)rS   chaptersrV   )Z_download_jsonr    r)   ra   rb   r   r_   rh   )r   Zmedia_idZtokenizer_queryr&   Zstreams_datarV   rq   rS   Zsupported_typeZstream_dataZm3u8_urlZchapterrp   Zchapter_durationr   r   r   _extract_ngtv_info   s^           
zTurnerBaseIE._extract_ngtv_info)N)N)__name__
__module____qualname__r   r   r)   rm   rr   r   r   r   r   r      s   
 +r   )
__future__r   rZ   Z	adobepassr   compatr   utilsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s
   4