o
    iE                     @   sh   d dl Z d dl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 G dd deZdS )	    N   )InfoExtractor   )	HTTPError)ExtractorErrorint_or_noneparse_resolutiontraverse_objtry_geturl_or_noneurljoinc                
   @   s   e Zd ZdZdZdZdddddd	d
dddidddddddddddidddddddddddiddddddddddd ddgZd!d"d#d$d%Zd&d' Zd(d) Z	d*S )+MGTVIEzChttps?://(?:w(?:ww)?\.)?mgtv\.com/[bv]/(?:[^/]+/)*(?P<id>\d+)\.htmlu   芒果TVMangoTVz-http://www.mgtv.com/v/1/290525/f/3116640.html3116640mp4u   我是歌手 第四季u$   我是歌手第四季双年巅峰会i%  zre:^https?://.*\.jpg$)idexttitledescriptionduration	thumbnailskip_downloadm3u8)url	info_dictparamsz)https://w.mgtv.com/b/427837/15588271.html15588271uu   春日迟迟再出发 沉浸版第1期：陆莹结婚半年查出肾炎被离婚 吴雅婷把一半票根退给前夫z$md5:a7a05a05b1aa87bd50cae619b19bbca6zre:^https?://.+\.jpgi  )r   r   r   r   r   r   z(https://w.mgtv.com/b/333652/7329822.html7329822u   拜托，请你爱我z$md5:cd81be6499bafe32e4d143abd822bf9ci`
  z)https://w.mgtv.com/b/427837/15591647.htmlT)r   only_matchingzHhttps://w.mgtv.com/b/388252/15634192.html?fpa=33318&fpos=4&lastp=ch_homez)http://www.mgtv.com/b/301817/3826653.htmlz(https://w.mgtv.com/b/301817/3826653.html)480p854x480)540p960x540)720p1280x720)1080p	1920x1080)u   标清u   高清u   超清u   蓝光c                 C   s\  |  |}tdt  dtt   d d d }z| jd|||dd| 	 dd }W n; t
yk } z/t|jtrf|jjd	krf| |jj  d }|d
dkr^| j| jd t
|d dd d }~ww | jd|||d d |ddd| 	 dd }t|ddthfdd}g }	tt|ddd fD ]l\}
}t|dddtd}t| j||d d!krd"nd#f}t| jt||d$ |dd%|p| d&d'thf}|sqt|d(p| jd)|d*d d+}|	t|p|
|d,||d-|d.d/t|d0d1|i|d2 q||	d3t|d'd4tj hfd5thfd6thfd7thfd8fd9| !||iS ):Nzdid=z|pno=1030|ver=0.3.0301|clit=z'https://pcweb.api.mgtv.com/player/videopch5)tk2video_idtype)queryheadersdatai  codeiE  )	countriesmsgT)expectedz+https://pcweb.api.mgtv.com/player/getSourceatcpm2	intelmgtv)r)   r4   r*   r+   srcstream_domain.F)get_allstreamc                 S   s   |d S )Nr    )_vr:   r:   I/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/mgtv.py<lambda>k   s    z&MGTVIE._real_extract.<locals>.<lambda>namestandardNamebarName)expected_typescalez16:9r   r   r   z"Downloading video info for format fatalnoteinfofilebitratez_(\d+)_mp4/tbr)defaultr   videoFormataudioFormat)	format_idr   r   rI   vcodecacodecm3u8_nativeReferer)protocolhttp_headersformat_note)r   formatsr   descr   thumb)r   r   r   r   	subtitles)"	_match_idbase64urlsafe_b64encodeuuiduuid4inttimeencode_download_jsongeo_verification_headersr   
isinstancecauser   status_parse_jsonresponsereaddecodegetraise_geo_restricted_GEO_COUNTRIESr	   r   	enumeratestr_RESOLUTIONSr   r   _search_regexappendr   stripextract_subtitles)selfr   r*   r)   api_dataeerrorstream_datar7   rU   idxr9   stream_name
resolution
format_urlrI   r:   r:   r=   _real_extractM   s   



	zMGTVIE._real_extractc           	   
   C   s   | j d| |ddpi }i }t|dd pg D ]F}|d}|s"q|dp(d}| j | | |dd	|d
 d| ddpAi }t|d}|sLq|| g ||d
dd q|S )Nz/https://pcweb.api.mgtv.com/video/title?videoId=F)rE   c                 S   s   | d d S )Nr.   r   r:   )xr:   r:   r=   r>      s    z'MGTVIE._get_subtitles.<locals>.<lambda>r   captionSimpleNameenzDownload subtitle for locale r?   z ()rD   rG   srt)r   r?   r   )ra   r
   rj   r   
setdefaultlowerrq   )	rt   r*   domainrG   rX   suburl_sublocalesub_urlr:   r:   r=   _get_subtitles   s2   

zMGTVIE._get_subtitlesN)
__name__
__module____qualname__
_VALID_URLIE_DESCIE_NAME_TESTSro   r}   r   r:   r:   r:   r=   r      sl    0Er   )rZ   r_   r\   commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r:   r:   r:   r=   <module>   s    $