o
    i<                     @   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/RWL07e eb0ae9007f9b305f9acd0a03e74cb1a9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!Aa20210914)idtitleext	thumbnail	age_limit	timestampupload_datez3Failed to parse XML: syntax error: line 1, column 0)urlmd5	info_dictexpected_warningszEhttps://prod-video-cms-rt-microsoft-com.akamaized.net/vhs/api/videos/c           	   	   C   s6  |  |}| | j| |}g }|d  D ]N\}}|dkr-|| j|d |ddd q|dkr@|| j|d |ddd q|d	krR|| 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pd|||dS )Nstreamssmooth_Streamingr   mssFfatalapple_HTTP_Live_Streamingr   	mPEG_DASHheightPixelswidthPixels)	format_idr   heightwidthc                 S   s$   i | ]\}}|| d ddgqS )r   vtt)r   r   get).0langdata r.   S/home/ubuntu/.local/lib/python3.10/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+   thumbr.   r.   r/   
<listcomp>=   s    
z2MicrosoftEmbedIE._real_extract.<locals>.<listcomp>)snippet
thumbnails.)r6   r   )r6   activeStartDate)r6   
minimumAger   )r   r   r   r   formats	subtitlesr7   )	_match_id_download_json_API_URLitemsextend_extract_ism_formats_extract_m3u8_formats_extract_mpd_formatsappendr*   r   _remove_duplicate_formatsr	   r   )	selfr   video_idmetadatar:   source_typesourcer;   r7   r.   r.   r/   _real_extract"   s>   


zMicrosoftEmbedIE._real_extractN)__name__
__module____qualname__
_VALID_URL_TESTSr>   rK   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tagund)
setdefaultpoprD   )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   languageengEnglishr%   ilanguage_preference)rA   )rF   ism_urlrG   r    r:   fmtr.   r.   r/   _extract_ismW   s   z"MicrosoftMediusBaseIE._extract_ismN)T)rL   rM   rN   staticmethodrX   r_   r.   r.   r.   r/   rQ   O   s    
rQ   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   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p&dd td|D }| |S )Nz!const\s+captionsConfiguration\s*=r1   r2   languageListc                 S      t |d S )Nsrcr   _vr.   r.   r/   <lambda>       z5MicrosoftMediusIE._extract_subtitle.<locals>.<lambda>rj   srclangkind)r   rR   namec                 S   s.   g | ]}|t |d d dd dqS )z.vttr   rm   )r   rR   )r
   split)r+   r   r.   r.   r/   r5      s    &z7MicrosoftMediusIE._extract_subtitle.<locals>.<listcomp>z7var\s+file\s+=\s+\{[^}]+\'(https://[^\']+\.vtt\?[^\']+))r   _search_jsonstrrefindallrX   )rF   webpagerG   r1   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   re   r:   r   r;   )r<   _download_webpage_og_search_title_og_search_descriptionr_   _search_regex_og_search_thumbnailr{   )rF   r   rG   rz   r.   r.   r/   rK      s   

zMicrosoftMediusIE._real_extractN)rL   rM   rN   rO   rP   r{   rK   r.   r.   r.   r/   ra   _   sL    &ra   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   re      )r   r   playlist_countz3https://learn.microsoft.com/en-us/events/build-2022z
build-2022zMicrosoft Build 2022 - Eventsz$md5:c16b43848027df837b22c6fbac7648d3   c                 c   s|    d}	 | j ||d| d|dd}t|ddd	thf}|D ]}| d
| V  q|t|7 }||ddks;|s=d S q)Nr   TzDownloading entries zen-us)localez$skip)queryresults.r   z!https://learn.microsoft.com/en-uscount)r=   r   rw   
url_resultlenr*   )rF   url_baserG   skipplaylist_info	url_pathsurl_pathr.   r.   r/   _entries   s   
z!MicrosoftLearnPlaylistIE._entriesc                 C   sz   |  |dd\}}| ||}| || |d}|dkr"dnd}d| d| d| }| j| |||fi |S )	Nr   type)r   re   showsepisodessessionsz6https://learn.microsoft.com/api/contentbrowser/search//)_match_valid_urlgroupr|   r}   r~   playlist_resultr   )rF   r   playlist_idplaylist_typerz   metainfosub_typer   r.   r.   r/   rK      s   z&MicrosoftLearnPlaylistIE._real_extractN)rL   rM   rN   rO   rP   r   rK   r.   r.   r.   r/   r      s&    	r   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-5c9fa08dc94crc   zEWhat is the Difference Between a Terminal and a Shell? (Part 2 of 20)z$md5:7bbbfb593d21c2cf2babc3715ade6b88i[c20230214z4re:https://learn\.microsoft\.com/video/media/.+\.pngzcount:14)r   r   r   re   r   r   r   r;   rf   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://.+/.+\.jpgie20240130)r   r   r   re   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 }r5|| j||dd t|ddthf }rM|| j||d	d
dd t|ddthf }	rd|| j	|	|ddd dD ] }
t|d|
 dthf }r|
|d|
 ddt| qft|ddthf }r|
|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 )"NentryIdTr   z8https://learn.microsoft.com/api/video/public/v1/entries/publicVideoadaptiveVideoUrlFadaptiveVideoHLSUrlr   hls)m3u8_idr    adaptiveVideoDashUrldash)mpd_idr    )lowmediumhighQualityVideoUrlzvideo-http-none)r   r%   acodecaudioUrlz
audio-http)r   r%   vcodecr1   c                 S   ri   )Nr   rk   rl   r.   r.   r/   ro     rp   z7MicrosoftLearnEpisodeIE._real_extract.<locals>.<lambda>rY   r   )rR   r   )r   r:   r;   r   re   
createTimethumbnailOtherSizes.)r   r7   )r<   r|   _html_search_metar=   r   r   r@   r_   rB   rC   rD   r   rX   rw   r}   r~   r   )rF   r   rG   rz   entry_id
video_infor:   r]   hls_urlmpd_urlkey	video_url	audio_urlr.   r.   r/   rK      sZ   



z%MicrosoftLearnEpisodeIE._real_extractNrL   rM   rN   rO   rP   rK   r.   r.   r.   r/   r      s4    	r   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-environmentsrb   rc   zMRapidly code, test and ship from secure cloud developer environments - Eventsz$md5:f26c1a85d41c1cffd27a0279254a25c3iXb20220524rd   r   r   r   re   r   r   r   rf   c                 C   sb   |  |}| ||}| || |t| d|dd}| j| jd|dddfdtd|S )N	startDate)r   re   r   externalVideoUrlvideoUrlTr   )url_transparentie)r<   r|   r}   r~   r   r   r   ra   )rF   r   rG   rz   r   r.   r.   r/   rK   -  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-a3527cb57554rc   zMicrosoft Build opening keynotez$md5:d38338f336ef4b6ef9ad2a7466a76655i Lf20240521rd   r   rf   z*https://build.microsoft.com/en-US/sessionsr   r   i  )r   r   playlist_mincountc                    sP     | fdd ddD }dkr |S t|fdddd	S )
Nc                    sP   g | ]$} 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 )onDemandT)r   r   	sessionIdr   re   startDateTime)r   r   re   r   )r   ra   r   rw   r   )r+   r   )rF   r.   r/   r5   X  s    z2MicrosoftBuildIE._real_extract.<locals>.<listcomp>z8https://api-v2.build.microsoft.com/api/session/all/en-USzDownloading video infor   c                    s   |d  kS )Nr   r.   rl   )rG   r.   r/   ro   f  rp   z0MicrosoftBuildIE._real_extract.<locals>.<lambda>F)get_all)r<   r=   r   r   )rF   r   entriesr.   )rF   rG   r/   rK   U  s   

zMicrosoftBuildIE._real_extractNr   r.   r.   r.   r/   r   <  s*    r   )rx   commonr   utilsr   r   r   r   r	   r
   r   r   rQ   ra   r   r   r   r   r.   r.   r.   r/   <module>   s    $@D0K