U
    gE                     @   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   芒果TVZMangoTVz-http://www.mgtv.com/v/1/290525/f/3116640.htmlZ3116640mp4u   我是歌手 第四季u$   我是歌手第四季双年巅峰会i%  zre:^https?://.*\.jpg$)idexttitledescriptionduration	thumbnailZskip_downloadZm3u8)urlZ	info_dictparamsz)https://w.mgtv.com/b/427837/15588271.htmlZ15588271uu   春日迟迟再出发 沉浸版第1期：陆莹结婚半年查出肾炎被离婚 吴雅婷把一半票根退给前夫z$md5:a7a05a05b1aa87bd50cae619b19bbca6zre:^https?://.+\.jpgi  )r   r   r   r   r   r   z(https://w.mgtv.com/b/333652/7329822.htmlZ7329822u   拜托，请你爱我z$md5:cd81be6499bafe32e4d143abd822bf9ci`
  z)https://w.mgtv.com/b/427837/15591647.htmlT)r   Z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)Z480pZ854x480)Z540pZ960x540)Z720pZ1280x720)Z1080pZ	1920x1080)u   标清u   高清u   超清u   蓝光c                 C   sp  |  |}tdt  dtt   d d d }z&| jd|||dd| 	 dd }W n t
k
r } zbt|jtr|jjd	kr| |jj  d }|d
dkr| j| jd t
|d dd W 5 d }~X Y nX | 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 ]\}
}t|dddtd}t| j||d d!krvd"nd#f}t| jt||d$ |dd%|p| d&d'thf}|sq@t|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/videoZpch5)tk2video_idtype)queryheadersdatai  codeiE  )Z	countriesmsgT)expectedz+https://pcweb.api.mgtv.com/player/getSourceZatcpm2Z	intelmgtv)r   r!   r   r   srcstream_domain.F)get_allstreamc                 S   s   |d S )Nr    )_vr&   r&   9/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/mgtv.py<lambda>k       z&MGTVIE._real_extract.<locals>.<lambda>nameZstandardNameZbarName)Zexpected_typeZscalez16:9r   r   r   z"Downloading video info for format fatalZnoteinfoZfilebitratez_(\d+)_mp4/tbr)defaultr   ZvideoFormatZaudioFormat)Z	format_idr   r   r0   ZvcodecZacodecZm3u8_nativeZReferer)protocolZhttp_headersZformat_note)r   formatsr   descr   Zthumb)r   r   r   r   	subtitles)"Z	_match_idbase64urlsafe_b64encodeuuidZuuid4inttimeencode_download_jsonZgeo_verification_headersr   
isinstancecauser   statusZ_parse_jsonresponsereaddecodegetZraise_geo_restrictedZ_GEO_COUNTRIESr	   r   	enumeratestr_RESOLUTIONSr   r   Z_search_regexappendr   stripZextract_subtitles)selfr   r   r   Zapi_dataeerrorZstream_datar#   r3   idxr%   stream_name
resolutionZ
format_urlr0   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 ]}|d}|sDq0|dpPd}| j | | |dd	|d
 d| ddpi }t|d}|sq0|| g ||d
dd q0|S )Nz/https://pcweb.api.mgtv.com/video/title?videoId=F)r.   c                 S   s   | d d S )Nr   r   r&   )xr&   r&   r)   r*      r+   z'MGTVIE._get_subtitles.<locals>.<lambda>r   ZcaptionSimpleNameenzDownload subtitle for locale r,   z ()r-   r/   Zsrt)r   r,   r   )r<   r
   rC   r   
setdefaultlowerrG   )	rI   r   domainr/   r5   subZurl_sublocaleZsub_urlr&   r&   r)   _get_subtitles   s4     

zMGTVIE._get_subtitlesN)
__name__
__module____qualname__Z
_VALID_URLZIE_DESCZIE_NAMEZ_TESTSrF   rO   rX   r&   r&   r&   r)   r      sj   0Er   )r6   r:   r8   commonr   Znetworking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r&   r&   r&   r)   <module>   s   $