a
    h<                     @   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	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parse_resolution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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_datez3Failed to parse XML: syntax error: line 1, column 0)urlmd5	info_dictZexpected_warningszEhttps://prod-video-cms-rt-microsoft-com.akamaized.net/vhs/api/videos/c           	   	   C   s8  |  |}| | j| |}g }|d  D ]\}}|dkrZ|| j|d |ddd q,|dkr|| j|d |ddd q,|d	kr|| j|d |d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mssFfatalZ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"   T/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/microsoftembed.py
<dictcomp>6   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_formats_extract_m3u8_formats_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/   r:   r"   r"   r"   r#   r      s   	r   c                   @   s"   e Zd Zedd ZdddZdS )MicrosoftMediusBaseIEc                 C   s,   i }| D ]}| |ddg | q|S )NtagZund)
setdefaultpopr5   )Zsubtitle_listr,   subr"   r"   r#   _sub_to_dictP   s    z"MicrosoftMediusBaseIE._sub_to_dictTc                 C   s>   | j |||d}|D ]$}|d dkrd|d vrd|d< q|S )Nr   languageZengZEnglishr   iZlanguage_preference)r2   )r6   ism_urlr7   r   r+   fmtr"   r"   r#   _extract_ismW   s
    
z"MicrosoftMediusBaseIE._extract_ismN)T)r;   r<   r=   staticmethodrE   rI   r"   r"   r"   r#   r@   O   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>rQ   Zsrclangkind)r   rA   namec                 S   s.   g | ]&}|t |d d dd dqS )z.vttr   rT   )r   rA   )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findallrE   )r6   webpager7   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   rO   r+   r   r,   )r-   _download_webpage_og_search_title_og_search_descriptionrI   Z_search_regexZ_og_search_thumbnailr`   )r6   r   r7   r_   r"   r"   r#   r:      s    

zMicrosoftMediusIE._real_extractN)r;   r<   r=   r>   r?   r`   r:   r"   r"   r"   r#   rK   _   sJ   &rK   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   rO      )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   r\   
url_resultlenr   )r6   url_baser7   skipZplaylist_infoZ	url_pathsZurl_pathr"   r"   r#   _entries   s    
z!MicrosoftLearnPlaylistIE._entriesc                 C   sz   |  |dd\}}| ||}| || |d}|dkrDdnd}d| d| d| }| j| |||fi |S )	Nr   type)r   rO   ZshowsZepisodessessionsz6https://learn.microsoft.com/api/contentbrowser/search//)Z_match_valid_urlgroupra   rb   rc   playlist_resultro   )r6   r   Zplaylist_idZplaylist_typer_   metainfoZsub_typerm   r"   r"   r#   r:      s    z&MicrosoftLearnPlaylistIE._real_extractN)r;   r<   r=   r>   r?   ro   r:   r"   r"   r"   r#   rd      s$   	rd   c                
   @   sT   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i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-5c9fa08dc94crM   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   rO   r   r   r   r,   rP   z`https://learn.microsoft.com/en-gb/shows/on-demand-instructor-led-training-series/az-900-module-1z$4fe10f7c-d83c-463b-ac0e-c30a8195e01br   z"AZ-900 Cloud fundamentals (1 of 6)z$md5:3c2212ce865e9142f402c766441bd5c9zre:https://.+/.+\.jpgieZ20240130)r   r   r   rO   r   r   r   formatzbv[protocol=https])r   r   paramsc                 C   s  |  |}| ||}| jd|ddd}| d| |}g }t|ddthf }rj|| j||dd t|ddthf }r|| j||d	d
dd t|ddthf }	r|| j	|	|ddd dD ]@}
t|d|
 dthf }r|
|d|
 ddt| qt|ddthf }r8|
|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entryIdTr   z8https://learn.microsoft.com/api/video/public/v1/entries/ZpublicVideoZadaptiveVideoUrlFZadaptiveVideoHLSUrlr   Zhls)Zm3u8_idr   ZadaptiveVideoDashUrlZdash)Zmpd_idr   )lowZmediumhighZQualityVideoUrlzvideo-http-none)r   r   ZacodecZaudioUrlz
audio-http)r   r   Zvcodecr%   c                 S   s   t |d S )Nr   rR   rS   r"   r"   r#   rV     rW   z7MicrosoftLearnEpisodeIE._real_extract.<locals>.<lambda>rF   r   )rA   r   )r   r+   r,   r   rO   Z
createTimeZthumbnailOtherSizes.)r   r*   )r-   ra   _html_search_metar.   r   r   r1   rI   r3   r4   r5   r   rE   r\   rb   rc   r   )r6   r   r7   r_   Zentry_id
video_infor+   rG   Zhls_urlZmpd_urlkeyZ	video_urlZ	audio_urlr"   r"   r#   r:      sX    



z%MicrosoftLearnEpisodeIE._real_extractNr;   r<   r=   r>   r?   r:   r"   r"   r"   r#   rv      s2   	rv   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-environmentsrL   rM   zMRapidly code, test and ship from secure cloud developer environments - Eventsz$md5:f26c1a85d41c1cffd27a0279254a25c3iXbZ20220524rN   r   r   r   rO   r   r   r   rP   c                 C   sb   |  |}| ||}| || |t| d|dd}| j| jd|dddfdtd|S )NZ	startDate)r   rO   r   ZexternalVideoUrlZvideoUrlTr   )url_transparentie)r-   ra   rb   rc   r   r|   rk   rK   )r6   r   r7   r_   ru   r"   r"   r#   r:   -  s    
z%MicrosoftLearnSessionIE._real_extractNr   r"   r"   r"   r#   r     s   r   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-a3527cb57554rM   zMicrosoft Build opening keynotez$md5:d38338f336ef4b6ef9ad2a7466a76655i LfZ20240521rN   r   rP   z*https://build.microsoft.com/en-US/sessionsr   rq   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)r   r   Z	sessionIdr   rO   ZstartDateTime)r   r   rO   r   )rk   rK   r   r\   r   )r   r}   )r6   r"   r#   r(   X  s   z2MicrosoftBuildIE._real_extract.<locals>.<listcomp>z8https://api-v2.build.microsoft.com/api/session/all/en-USzDownloading video inforq   c                    s   |d  kS )Nr   r"   rS   )r7   r"   r#   rV   f  rW   z0MicrosoftBuildIE._real_extract.<locals>.<lambda>F)get_all)r-   r.   rt   r   )r6   r   entriesr"   )r6   r7   r#   r:   U  s    

zMicrosoftBuildIE._real_extractNr   r"   r"   r"   r#   r   <  s(   r   )r]   commonr   utilsr   r   r   r   r	   r
   r   r   r@   rK   rd   rv   r   r   r"   r"   r"   r#   <module>   s   $@D0K