
    VGh<                         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e      Z G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Zy)    N   )InfoExtractor   )int_or_noneparse_iso8601parse_resolutiontraverse_objunified_timestampurl_basenameurl_or_nonec            
       <    e Zd ZdZdddddddd	d
ddgdgZdZd Zy)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           	         | j                  |      }| j                  | j                  |z   |      }g }|d   j                         D ]  \  }}|dk(  r(|j	                  | j                  |d   |dd             3|dk(  r(|j	                  | j                  |d   |dd             `|d	k(  r'|j	                  | j                  |d   |d             |j                  ||d   |j                  d
      |j                  d      d        t        |di       j                         D ci c]  \  }}||j                  d      ddg }	}}t        |d      D 
cg c]=  }
|
j                  d      |
j                  d      xs d |
j                  d      xs d d? }}
| j                  |       |t        |d      t        t        |d            t        t        |d            xs d||	|dS c c}}w c c}
w )Nstreamssmooth_Streamingr   mssFfatalapple_HTTP_Live_Streamingr   	mPEG_DASHheightPixelswidthPixels)	format_idr   heightwidthcaptionsdefaultvtt)r   r   )snippet
thumbnails.r*   r)   )r   r*   r)   )r/   r   )r/   activeStartDate)r/   
minimumAger   )r   r   r   r   formats	subtitlesr0   )	_match_id_download_json_API_URLitemsextend_extract_ism_formats_extract_m3u8_formats_extract_mpd_formatsappendgetr	   _remove_duplicate_formatsr
   r   )selfr   video_idmetadatar3   source_typesourcelangdatar4   thumbr0   s               h/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/microsoftembed.py_real_extractzMicrosoftEmbedIE._real_extract"   s"   >>#&&&t}}x'?J#+I#6#<#<#> 	K00t88RW_d8ef ;;t99&-SX`e9fg+t88X]8^_!,!%=$jj8#ZZ6	  	& ".h
B!O!U!U!W	
 4 xx  
	 
 $H.LM	O  99U#YYw'/4ii)1T
 O
 O
 	&&z2 !(,@A*<B`+ab$\(<U%VW\[\"$
 	

Os   * G.AG4N)__name__
__module____qualname__
_VALID_URL_TESTSr7   rI        rH   r   r      sL    gJ J1Fv#%
 TT F WH*
rP   r   c                   $    e Zd Zed        ZddZy)MicrosoftMediusBaseIEc                 z    i }| D ]3  }|j                  |j                  dd      g       j                  |       5 |S )Ntagund)
setdefaultpopr=   )subtitle_listr4   subs      rH   _sub_to_dictz"MicrosoftMediusBaseIE._sub_to_dictP   sD    	  	HC  !6;BB3G	HrP   c                 h    | j                  |||      }|D ]  }|d   dk7  sd|d   vsd|d<    |S )Nr"   languageengEnglishr(   ilanguage_preference)r:   )r@   ism_urlrA   r#   r3   fmts         rH   _extract_ismz"MicrosoftMediusBaseIE._extract_ismW   sR    ++GXU+K 	1C:%'IS=M,M-0)*	1 rP   N)T)rJ   rK   rL   staticmethodrZ   rb   rO   rP   rH   rR   rR   O   s     rP   rR   c            
       r    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 Zd Zy)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   r4   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           	      F   t        | j                  d|d|d       dd ddt        hfdt        hfd	f      xsT t        j                  d
|      D cg c]4  }|t        |      j                  d      d   j                  d      d   d6 c}}| j                  |      S c c}w )Nz!const\s+captionsConfiguration\s*=r+   r,   languageListc                     t        |d         S )Nsrcr   _vs     rH   <lambda>z5MicrosoftMediusIE._extract_subtitle.<locals>.<lambda>   s    +ah*? rP   ro   srclangkind)r   rT   namez7var\s+file\s+=\s+\{[^}]+\'(https://[^\']+\.vtt\?[^\']+)z.vttr   rr   )r   rT   )r	   _search_jsonstrrefindallr   splitrZ   )r@   webpagerA   r   r+   s        rH   _extract_subtitlez#MicrosoftMediusIE._extract_subtitle   s    BGZYakop?!C5)#B  p  "zz*dfmnp  S(9(?(?(G(J(P(PQT(UVX(YZ p 	   **ps   9Bc           
         | j                  |      }| j                  d| |      }|| j                  |      | j                  |      | j	                  | j                  d|d      |      | j                  |      | j                  ||      dS )Nz,https://medius.microsoft.com/Embed/video-nc/z!StreamUrl\s*=\s*"([^"]+manifest)"zism url)r   r   ri   r3   r   r4   )r5   _download_webpage_og_search_title_og_search_descriptionrb   _search_regex_og_search_thumbnailr   )r@   r   rA   r~   s       rH   rI   zMicrosoftMediusIE._real_extract   s    >>#&((+WX`Wa)bdlm **7366w?((""#GR[\^fh227;//B
 	
rP   N)rJ   rK   rL   rM   rN   r   rI   rO   rP   rH   re   re   _   s    qJ b8[Ab#

 b8.Ab#

 f8>AX#

 b bC$FL
+
rP   re   c                   D    e Zd ZdZdddddddd	d
dddddgZd Zd Zy)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   playlist_countz3https://learn.microsoft.com/en-us/events/build-2022z
build-2022zMicrosoft Build 2022 - Eventsz$md5:c16b43848027df837b22c6fbac7648d3   c              #      K   d}	 | j                  ||d| d|d      }t        |dddt        hf      }|D ]  }| j                  d	|         |t	        |      z  }||j                  d
d      k\  s|sy tw)Nr   zDownloading entries zen-us)localez$skip)queryresults.r   z!https://learn.microsoft.com/en-uscount)r6   r	   rz   
url_resultlenr>   )r@   url_baserA   skipplaylist_info	url_pathsurl_paths          rH   _entriesz!MicrosoftLearnPlaylistIE._entries   s      //(FZ[_Z`Da!j/ M %]YUSE4RSI% Voo(I(&TUUVC	N"D}((!44I s   A8A:c                 $   | j                  |      j                  dd      \  }}| j                  ||      }| j                  |      | j	                  |      d}|dk(  rdnd}d| d| d| } | j
                  | j                  ||      |fi |S )	Nr   type)r   ri   showsepisodessessionsz6https://learn.microsoft.com/api/contentbrowser/search//)_match_valid_urlgroupr   r   r   playlist_resultr   )r@   r   playlist_idplaylist_typer~   metainfosub_typer   s           rH   rI   z&MicrosoftLearnPlaylistIE._real_extract   s    %)%:%:3%?%E%EdF%S"]((k: **7366w?
 "/'!9:zKM?Z[\g[hhijrist#t##DMM(K$H+bYabbrP   N)rJ   rK   rL   rM   rN   r   rI   rO   rP   rH   r   r      sR    pJK&)A

  E4A

 F$crP   r   c            
       R    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 Zy)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[c20230214z4re:https://learn\.microsoft\.com/video/media/.+\.pngzcount:14)r   r   r   ri   r   r   r   r4   rj   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   ri   r   r   r   formatzbv[protocol=https])r   r   paramsc                    | j                  |      }| j                  ||      }| j                  d|dd      }| j                  d| |      }g }t	        |ddt
        hf      x}r#|j                  | j                  ||d             t	        |ddt
        hf      x}r%|j                  | j                  ||d	d
d             t	        |ddt
        hf      x}	r$|j                  | j                  |	|dd             dD ]?  }
t	        |d|
 dt
        hf      x}s|j                  |d|
 ddt        |             A t	        |ddt
        hf      x}r|j                  |ddd       ||| j                  t	        |ddd dt        hfddf            | j                  |      | j                  |      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(   vcodecr+   c                     t        |d         S )Nr   rp   rq   s     rH   rt   z7MicrosoftLearnEpisodeIE._real_extract.<locals>.<lambda>  s    AeH8M rP   r\   r   )rT   r   )r   r3   r4   r   ri   
createTimethumbnailOtherSizes.)r   r0   )r5   r   _html_search_metar6   r	   r   r9   rb   r;   r<   r=   r   rZ   rz   r   r   r   )r@   r   rA   r~   entry_id
video_infor3   r`   hls_urlmpd_urlkey	video_url	audio_urls                rH   rI   z%MicrosoftLearnEpisodeIE._real_extract   sU   >>#&((h7)))Wit)T((FxjQS[]
 ":?QT_S`/abb7bNN4,,Whe,LM":?TWbVc/dee7eNN455gxX]ej5kl":?UXcWd/eff7fNN444Whv]b4cd, 	C(muOE\_j^k5lmmym$#.se!4$  'y1	  	 %Z-k]1[\\9\NN )   **<
z+M&. PE , 
 **7366w?
 :*]O<,.CS5S^R_J`a( 
 	
rP   NrJ   rK   rL   rM   rN   rI   rO   rP   rH   r   r      sk    [J ^8\A#%P#	
 r89A1#%
 12F4,
rP   r   c            	       2    e Zd ZdZdddddddd	d
dgZd Zy)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b20220524rh   r   r   r   ri   r   r   r   rj   c           	         | j                  |      }| j                  ||      }| j                  |      | j                  |      t	        | j                  d|d            d} | j                  | j                  d|dd      fdt        d|S )N	startDate)r   ri   r   externalVideoUrlvideoUrlTr"   )url_transparentie)r5   r   r   r   r   r   r   re   )r@   r   rA   r~   r   s        rH   rI   z%MicrosoftLearnSessionIE._real_extract-  s    >>#&((h7 **7366w?&t'='=k7T_'`a
 t""#5w
RV"WD %6D:BD 	DrP   Nr   rO   rP   rH   r   r     s9    \J J8dA#%b
 FDrP   r   c            	       D    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 Zy)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 Lf20240521rh   r   rj   z*https://build.microsoft.com/en-US/sessionsr   r   i  )r   r   playlist_mincountc                 L   | j                  |      | j                  dd      D cg c]J  } | j                  |d   ft        ddt	        |dt
        hfdt
        hfdt
        hfd	t        hfd
      L }}dk(  r| j                  |      S t	        |fdd      S c c}w )Nz8https://api-v2.build.microsoft.com/api/session/all/en-USzDownloading video infoonDemandT)r   r   	sessionIdr   ri   startDateTime)r   r   ri   r   r   c                     |d   k(  S )Nr   rO   )rr   rs   rA   s     rH   rt   z0MicrosoftBuildIE._real_extract.<locals>.<lambda>f  s    qw(7J rP   F)get_all)r5   r6   r   re   r	   rz   r   r   )r@   r   r   entriesrA   s       @rH   rI   zMicrosoftBuildIE._real_extractU  s    >>#& #11JHVnp

  DOO:&+<dVbcm&.%u-$1C5#9"1M?!C	p W

 

 z!''::*JUZ[[

s   AB!Nr   rO   rP   rH   r   r   <  sZ    KMJ q86A#%b
 <*
 !F&\rP   r   )r{   commonr   utilsr   r   r   r	   r
   r   r   r   rR   re   r   r   r   r   rO   rP   rH   <module>r      s~    	 !  =
} =
@M  A
- A
H-c} -c`H
3 H
VDm D<*\} *\rP   