U
    g!$                     @   sH   d dl Z ddlmZ ddlmZmZmZmZmZm	Z	 G dd deZ
dS )    N   )InfoExtractor   )int_or_none
js_to_jsonparse_durationtraverse_objtry_geturljoinc                   @   s  e Zd ZdZde dgZdZddddd	d
ddddg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#d$d%d&d'd(d)d
d"dd*d$d%d+d,d-d.dd
ddd/d0id1d2d0d3d4d0d3d5d0d3g	Zd6d7 Zed8d9 Z	d:d; Z
dGeeed?d@dAZdHeeed?dCdDZdEdF Zd<S )IMainStreamingIEzchttps?://(?:webtools-?)?(?P<host>[A-Za-z0-9-]*\.msvdn\.net)/(?:embed|amp_embed|content)/(?P<id>\w+)z<iframe[^>]+?src=["\']?(?P<url>z)["\']?zMainStreaming PlayerzNhttps://webtools-e18da6642b684f8aa9ae449862783a56.msvdn.net/embed/53EN6GxbWaJCZ53EN6GxbWaJCz!Diretta homepage 2021-12-31 12:00 was_liveZmp4z5re:https?://[A-Za-z0-9-]*\.msvdn.net/image/\w+/poster)idtitledescriptionlive_statusext	thumbnailz-Ignoring alternative content ID: WDAF1KOWUpH3z)MainStreaming said: Live event is OFFLINEzlive stream offline)url	info_dictZexpected_warningsskipzNhttps://webtools-e18da6642b684f8aa9ae449862783a56.msvdn.net/embed/WDAF1KOWUpH3ZWDAF1KOWUpH3zPlaylist homepage)r   r   r   )r   r   Zplaylist_mincountzNhttps://webtools-859c1818ed614cc5b0047439470927b0.msvdn.net/embed/tDoFkZD3T1LwZtDoFkZD3T1Lwz1re:Class CNBC Live \d{4}-\d{2}-\d{2} \d{2}:\d{2}$is_live)r   r   r   r   r   zlive stream)r   r   r   z]https://webtools-f5842579ff984c1c98d63b8d789673eb.msvdn.net/embed/EUlZfGWkGpOd?autoPlay=falseZEUlZfGWkGpOdzLa Settimana z03 Ottobre ore 02:00not_livei  )r   r   r   r   r   r   duration)r   r   zahttps://f5842579ff984c1c98d63b8d789673eb.msvdn.net/embed/MfuWmzL2lGkA?autoplay=false&T=1635860445ZMfuWmzL2lGkAz
TG Mattinaz06 Ottobre ore 08:00gQ@zIhttps://webtools-f5842579ff984c1c98d63b8d789673eb.msvdn.net/embed/HVvPMzyZHVvPMzyz5re:^Diretta LaC News24 \d{4}-\d{2}-\d{2} \d{2}:\d{2}$zcanale all newsZskip_downloadT)r   r   paramsz-https://webtools.msvdn.net/embed/MfuWmzL2lGkA)r   Zonly_matchingzIhttps://859c1818ed614cc5b0047439470927b0.msvdn.net/amp_embed/tDoFkZD3T1LwzHhttps://859c1818ed614cc5b0047439470927b0.msvdn.net/content/tDoFkZD3T1Lw#c              
   c   sL   |D ]B}| d}dt |tt|d| dd| d| dV  qd S )N	contentIDr   )r   ZtotalSecondsr   https://z/embed/)_typeie_keyr   r   r   r   )getr   r   r   r   )selfhostZplaylist_contententryZ
content_id r#   B/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/mainstreaming.py_playlist_entriesi   s    
z!MainStreamingIE._playlist_entriesc                 C   s(   |  ds$d|  dsdnd |  } | S )NZwebtools.-r   )
startswith)r!   r#   r#   r$   _get_webtools_hostu   s    
z"MainStreamingIE._get_webtools_hostc                 C   s   |    d| | S )Nz//)Zhttp_schemer)   )r    r!   r#   r#   r$   _get_webtools_base_url{   s    z&MainStreamingIE._get_webtools_base_urlNDownloading API JSONF)r!   pathitem_idc                 C   s   |  |d| ||||S )Nz/api/v2/)_call_webtools_apir    r!   r,   r-   querynotefatalr#   r#   r$   	_call_api~   s    zMainStreamingIE._call_apiDownloading webtools API JSONc                 C   s    | j t| ||||||dS )N)r0   r1   r2   )Z_download_jsonr
   r*   r/   r#   r#   r$   r.      s        z"MainStreamingIE._call_webtools_apic                 C   s  |  | \}}t| j|d| |dddd }|st| ||}| j| jd|ddtjd	|t	d
dpji }|d }|
dp|}|
dp|}|
d}t|ddtd}d}	|
dr| | |
d}
|
r| d|
  t|
d}d }g }i }|dkrt|dtd}d| d|d  d| d|r4dnd  }d!}	| j|d"| |d#dp\i }|
d$d
kr| jd%|
d& d'd( d)}	nl|d*kr| | ||
d+|||S |d,krd| d-| d}||d. d/d0d1 n| d2|  |rJ| j|d3 |d
d4\}}| j|d5 |d
d4\}}| ||}|||  |||||	t|
d6|
d7|t| |d8| d9d:	S );Nzcontent/z!Downloading content info API JSON)r1   c                 S   s   | d S )NZplayerContentInfor#   )xr#   r#   r$   <lambda>       z/MainStreamingIE._real_extract.<locals>.<lambda>zconfig\s*=\s*({.+?})\s*;zmainstreaming player configz{})defaultflagsF)Ztransform_sourcer2   ZcontentInfor!   r   r   ZlongDescriptionZshortDescription)Zexpected_typer   Z
drmEnabledZalternativeContentIDz!Ignoring alternative content ID: contentType   )ZplayerSettingsZ
dvrEnabledr   z/live/ZliveSourceID/z/%sz?DVRr   r   z
heartbeat/zChecking stream statusZheartBeatUpzMainStreaming said: ZresponseMessageT)expectedr      ZplaylistContents
   z/vod/zoriginal.mp4originalr   )r   Zformat_noteZqualityzUnknown content type zplaylist.m3u8)video_idr2   zmanifest.mpdr   tagszimage/z/poster)	r   r   r   formatsr   r   rB   	subtitlesr   )Z_match_valid_urlgroupsr	   r3   Z_download_webpageZ_parse_jsonZ_search_regexreDOTALLr   r   r   strZ
report_drmZreport_warningr   boolZraise_no_formatsZplaylist_resultr%   appendZ#_extract_m3u8_formats_and_subtitlesZ"_extract_mpd_formats_and_subtitlesZ_merge_subtitlesextendr   r
   r*   )r    r   r!   rA   Zcontent_infoZwebpageZplayer_configr   r   r   Zalternative_content_idcontent_typeZformat_base_urlrC   rD   Zdvr_enabledZ	heartbeatZm3u8_formatsZ	m3u8_subsZmpd_formatsZmpd_subsr#   r#   r$   _real_extract   s            




*
   
  
  
zMainStreamingIE._real_extract)Nr+   F)Nr4   F)__name__
__module____qualname__Z
_VALID_URLZ_EMBED_REGEXZIE_DESCZ_TESTSr%   staticmethodr)   r*   rH   r3   r.   rM   r#   r#   r#   r$   r      s   	
	 V
r   )rF   commonr   utilsr   r   r   r   r	   r
   r   r#   r#   r#   r$   <module>   s    
