U
    g5                     @   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	 G dd deZ
G dd	 d	eZG d
d deZG dd deZG dd deZG dd deZG dd deZdS )    N   )InfoExtractor   )int_or_noneparse_iso8601traverse_objunified_timestampurl_basenameurl_or_nonec                
   @   s:   e Zd ZdZdddddddd	d
ddgZdZdd ZdS )MicrosoftEmbedIEzShttps?://(?:www\.)?microsoft\.com/(?:[^/]+/)?videoplayer/embed/(?P<id>[a-z0-9A-Z]+)z8https://www.microsoft.com/en-us/videoplayer/embed/RWL07eZ eb0ae9007f9b305f9acd0a03e74cb1a9ZRWL07ez/Microsoft for Public Health and Social Servicesmp4z[http://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RWL7Ju?ver=cae5r   iL!AaZ20210914)idtitleext	thumbnail	age_limit	timestampupload_date)urlmd5	info_dictzEhttps://prod-video-cms-rt-microsoft-com.akamaized.net/vhs/api/videos/c           	   	   C   s,  |  |}| | j| |}g }|d  D ]\}}|dkrV|| |d |d q,|dkrx|| |d |d q,|dkr|| |d | q,|||d |	d|	d	d
 q,dd t
|di d D }dd t
|dD }| | |t
|dtt
|dtt
|dp d|||dS )NZstreamsZsmooth_Streamingr   ZmssZapple_HTTP_Live_Streamingr   Z	mPEG_DASHZheightPixelsZwidthPixels)	format_idr   heightwidthc                 S   s$   i | ]\}}|| d ddgqS )r   Zvtt)r   r   get).0langdata r   C/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/microsoftembed.py
<dictcomp>4   s
   z2MicrosoftEmbedIE._real_extract.<locals>.<dictcomp>captionsdefaultc                 S   s2   g | ]*}| d | dpd| dp(ddqS )r   r   Nr   )r   r   r   r   )r   Zthumbr   r   r    
<listcomp>;   s
   z2MicrosoftEmbedIE._real_extract.<locals>.<listcomp>)snippet
thumbnails.)r&   r   )r&   ZactiveStartDate)r&   Z
minimumAger   )r   r   r   r   formats	subtitlesr'   )	_match_id_download_json_API_URLitemsextend_extract_ism_formatsZ_extract_m3u8_formatsZ_extract_mpd_formatsappendr   r   Z_remove_duplicate_formatsr   r   )	selfr   video_idmetadatar(   Zsource_typesourcer)   r'   r   r   r    _real_extract    s>    


zMicrosoftEmbedIE._real_extractN)__name__
__module____qualname__
_VALID_URL_TESTSr,   r5   r   r   r   r    r      s   r   c                   @   s    e Zd Zedd Zdd ZdS )MicrosoftMediusBaseIEc                 C   s,   i }| D ]}| |ddg | q|S )NtagZund)
setdefaultpopr0   )Zsubtitle_listr)   subr   r   r    _sub_to_dictN   s    z"MicrosoftMediusBaseIE._sub_to_dictc                 C   s:   |  ||}|D ]$}|d dkrd|d krd|d< q|S )NlanguageZengZEnglishr   iZlanguage_preference)r/   )r1   Zism_urlr2   r(   fmtr   r   r    _extract_ismU   s
    
z"MicrosoftMediusBaseIE._extract_ismN)r6   r7   r8   staticmethodr@   rC   r   r   r   r    r;   M   s   
r;   c                
   @   sv   e Zd ZdZ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gZdd Zdd ZdS )MicrosoftMediusIEz]https?://medius\.microsoft\.com/Embed/(?:Video\?id=|video-nc/|VideoDetails/)(?P<id>[\da-f-]+)zPhttps://medius.microsoft.com/Embed/video-nc/9640d86c-f513-4889-959e-5dace86e7d2b$9640d86c-f513-4889-959e-5dace86e7d2bismvzDRapidly code, test and ship from secure cloud developer environmentsz$md5:33c8e4facadc438613476eea24165f71Fre:https://mediusimg\.event\.microsoft\.com/video-\d+/thumbnail\.jpg.*zcount:30)r   r   r   descriptionr   r)   r   r   zPhttps://medius.microsoft.com/Embed/video-nc/81215af5-c813-4dcd-aede-94f4e1a7daa3z$81215af5-c813-4dcd-aede-94f4e1a7daa3zMicrosoft Build openingz$md5:43455096141077a1f23144cab8cec1cbzcount:31zThttps://medius.microsoft.com/Embed/VideoDetails/78493569-9b3b-4a85-a409-ee76e789e25cz$78493569-9b3b-4a85-a409-ee76e789e25cz' Anomaly Detection & Root cause at Edgez$md5:f8f1ad93d7918649bfb97fa081b03b83z<re:https://mediusdownload.event.microsoft.com/asset.*\.jpg.*zcount:17zPhttps://medius.microsoft.com/Embed/Video?id=0dc69bda-079b-4070-a7db-a8da1a06a9c7T)r   Zonly_matchingzPhttps://medius.microsoft.com/Embed/video-nc/fe823a91-959c-465b-96d4-8f4db624f72cc                 C   sX   t | jd|d|d dddd ddthfd	thfd
fpLdd td|D }| |S )Nz!const\s+captionsConfiguration\s*=r"   r#   ZlanguageListc                 S   s   t |d S )Nsrcr
   _vr   r   r    <lambda>       z5MicrosoftMediusIE._extract_subtitle.<locals>.<lambda>rK   Zsrclangkind)r   r<   namec                 S   s.   g | ]&}|t |d d dd dqS )z.vttr   rN   )r   r<   )r	   split)r   r   r   r   r    r%      s   z7MicrosoftMediusIE._extract_subtitle.<locals>.<listcomp>z7var\s+file\s+=\s+\{[^}]+\'(https://[^\']+\.vtt\?[^\']+))r   Z_search_jsonstrrefindallr@   )r1   webpager2   r"   r   r   r    _extract_subtitle   s    
	z#MicrosoftMediusIE._extract_subtitlec              
   C   sZ   |  |}| d| |}|| || || | d|d|| || ||dS )Nz,https://medius.microsoft.com/Embed/video-nc/z!StreamUrl\s*=\s*"([^"]+manifest)"zism url)r   r   rI   r(   r   r)   )r*   _download_webpage_og_search_title_og_search_descriptionrC   Z_search_regexZ_og_search_thumbnailrZ   )r1   r   r2   rY   r   r   r    r5      s    
 
zMicrosoftMediusIE._real_extractN)r6   r7   r8   r9   r:   rZ   r5   r   r   r   r    rE   ]   sJ   &rE   c                   @   sH   e Zd ZdZdddddddd	d
dddddgZdd Zdd ZdS )MicrosoftLearnPlaylistIEz\https?://learn\.microsoft\.com/(?:[\w-]+/)?(?P<type>shows|events)/(?P<id>[\w-]+)/?(?:[?#]|$)z:https://learn.microsoft.com/en-us/shows/bash-for-beginnerszbash-for-beginnerszBash for Beginnersz$md5:16a91c07222117d1e00912f0dbc02c2c)r   r   rI      )r   r   Zplaylist_countz3https://learn.microsoft.com/en-us/events/build-2022z
build-2022zMicrosoft Build 2022 - Eventsz$md5:c16b43848027df837b22c6fbac7648d3   c                 c   sz   d}| j ||d| d|dd}t|dddthf}|D ]}| d	| V  q:|t|7 }||d
dksv|sqvqd S )Nr   zDownloading entries zen-us)localez$skip)queryresults.r   z!https://learn.microsoft.com/en-uscount)r+   r   rV   
url_resultlenr   )r1   url_baser2   skipZplaylist_infoZ	url_pathsZurl_pathr   r   r    _entries   s    
z!MicrosoftLearnPlaylistIE._entriesc                 C   sv   |  |dd\}}| ||}| || |d}|dkrDdnd}d| d| d| }| j| |||f|S )	Nr   type)r   rI   ZshowsZepisodessessionsz6https://learn.microsoft.com/api/contentbrowser/search//)Z_match_valid_urlgroupr[   r\   r]   playlist_resultri   )r1   r   Zplaylist_idZplaylist_typerY   metainfoZsub_typerg   r   r   r    r5      s    z&MicrosoftLearnPlaylistIE._real_extractN)r6   r7   r8   r9   r:   ri   r5   r   r   r   r    r^      s$   	r^   c                
   @   s6   e Zd ZdZdddddddd	d
ddgZdd ZdS )MicrosoftLearnEpisodeIEzGhttps?://learn\.microsoft\.com/(?:[\w-]+/)?shows/[\w-]+/(?P<id>[^?#/]+)zhttps://learn.microsoft.com/en-us/shows/bash-for-beginners/what-is-the-difference-between-a-terminal-and-a-shell-2-of-20-bash-for-beginners/z$d44e1a03-a0e5-45c2-9496-5c9fa08dc94crG   zEWhat is the Difference Between a Terminal and a Shell? (Part 2 of 20)z$md5:7bbbfb593d21c2cf2babc3715ade6b88i[cZ20230214z4re:https://learn\.microsoft\.com/video/media/.*\.pngzcount:14)r   r   r   rI   r   r   r   r)   rJ   c                 C   s   |  |}| ||}| jd|ddd}| d| |}|| |d d || t|dddd	 d
thfddf| || 	|dt|dt
hfddddthifdS )NZentryIdTfatalz8https://learn.microsoft.com/api/video/public/v1/entries/ZpublicVideoZadaptiveVideoUrlr"   c                 S   s   t |d S )Nr   rL   rM   r   r   r    rP      rQ   z7MicrosoftLearnEpisodeIE._real_extract.<locals>.<lambda>rA   r   )r<   r   )r   r(   r)   r   rI   Z
createTimeZthumbnailOtherSizes.)r   r'   )r*   r[   _html_search_metar+   rC   r@   r   rV   r\   r]   r   r
   )r1   r   r2   rY   Zentry_id
video_infor   r   r    r5      s2    
   
z%MicrosoftLearnEpisodeIE._real_extractNr6   r7   r8   r9   r:   r5   r   r   r   r    rp      s   rp   c                	   @   s4   e Zd ZdZdddddddd	d
dgZdd ZdS )MicrosoftLearnSessionIEzHhttps?://learn\.microsoft\.com/(?:[\w-]+/)?events/[\w-]+/(?P<id>[^?#/]+)zxhttps://learn.microsoft.com/en-us/events/build-2022/ts01-rapidly-code-test-ship-from-secure-cloud-developer-environmentsrF   rG   zMRapidly code, test and ship from secure cloud developer environments - Eventsz$md5:f26c1a85d41c1cffd27a0279254a25c3iXbZ20220524rH   r   r   r   rI   r   r   r   rJ   c                 C   sb   |  |}| ||}| || |t| d|dd}| j| jd|dddfdtd|S )NZ	startDate)r   rI   r   ZexternalVideoUrlZvideoUrlTrq   )url_transparentie)r*   r[   r\   r]   r   rs   re   rE   )r1   r   r2   rY   ro   r   r   r    r5     s    
 z%MicrosoftLearnSessionIE._real_extractNru   r   r   r   r    rv      s   rv   c                	   @   sF   e Zd ZddgZddddddd	d
dddddiddgZdd ZdS )MicrosoftBuildIEz@https?://build\.microsoft\.com/[\w-]+/sessions/(?P<id>[\da-f-]+)zBhttps?://build\.microsoft\.com/[\w-]+/(?P<id>sessions)/?(?:[?#]|$)z_https://build.microsoft.com/en-US/sessions/b49feb31-afcd-4217-a538-d3ca1d171198?source=sessionsz$aee55fb5-fcf9-4b38-b764-a3527cb57554rG   zMicrosoft Build opening keynotez$md5:d38338f336ef4b6ef9ad2a7466a76655i LfZ20240521rH   rw   rJ   z*https://build.microsoft.com/en-US/sessionsr   rk   i  )r   r   Zplaylist_mincountc                    sT     | fdd ddD }dkr: |S t|fdddd	S d S )
Nc                    sP   g | ]H} j |d  ftddt|dthfdthfdthfdthfdqS )ZonDemandT)ry   rx   Z	sessionIdr   rI   ZstartDateTime)r   r   rI   r   )re   rE   r   rV   r   )r   rt   )r1   r   r    r%   3  s    z2MicrosoftBuildIE._real_extract.<locals>.<listcomp>z8https://api-v2.build.microsoft.com/api/session/all/en-USzDownloading video infork   c                    s   |d  kS )Nr   r   rM   )r2   r   r    rP   A  rQ   z0MicrosoftBuildIE._real_extract.<locals>.<lambda>F)get_all)r*   r+   rn   r   )r1   r   entriesr   )r1   r2   r    r5   0  s    

  zMicrosoftBuildIE._real_extractNru   r   r   r   r    rz     s*    rz   )rW   commonr   utilsr   r   r   r   r	   r
   r   r;   rE   r^   rp   rv   rz   r   r   r   r    <module>   s    
?D0(