
    yf                     v    d dl Z ddlmZ ddl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y)    N   )InfoExtractor   )int_or_noneparse_durationsmuggle_urlunsmuggle_url
xpath_textc                       e Zd Zd Zd Zy)MicrosoftVirtualAcademyBaseIEc                 .    | j                  d|z  |d      S )Nz@https://api-mlxprod.microsoft.com/services/products/anonymous/%szDownloading course base URL)_download_json)self	course_id
display_ids      J/usr/lib/python3/dist-packages/yt_dlp/extractor/microsoftvirtualacademy.py_extract_base_urlz/MicrosoftVirtualAcademyBaseIE._extract_base_url   s$    ""NQZZ57 	7    c                     |syt        j                  d|      }|r+t        |j                  d            |j                  d      fS d |fS )N)NNz%(?P<chapter>\d+)\s*\|\s*(?P<title>.+)chaptertitle)researchintgroup)r   r   ms      r   _extract_chapter_and_titlez8MicrosoftVirtualAcademyBaseIE._extract_chapter_and_title   sF    II>F>?AGGI&')9:RdE]Rr   N)__name__
__module____qualname__r   r    r   r   r   r      s    7
Sr   r   c            	       P    e Zd ZdZdZdez  Zdddddd	d
ddigidddddgZd Zy)MicrosoftVirtualAcademyIEmvaz Microsoft Virtual Academy videosz(?:%s:|https?://(?:mva\.microsoft|(?:www\.)?microsoftvirtualacademy)\.com/[^/]+/training-courses/[^/?#&]+-)(?P<course_id>\d+)(?::|\?l=)(?P<id>[\da-zA-Z]+_\d+)z{https://mva.microsoft.com/en-US/training-courses/microsoft-azure-fundamentals-virtual-machines-11788?l=gfVXISmEB_6804984382 7826c44fc31678b12ad8db11f6b5abb9gfVXISmEB_6804984382mp4zCourse Introductionz
mincount:3enextttml)idr)   r   formats	subtitles)urlmd5	info_dictzmva:11788:gfVXISmEB_6804984382Tr.   only_matchingc           
      b   t        |i       \  }}| j                  |      }|j                  d      }|j                  d      }|j                  d      xs | j	                  ||      }| j                  |d|d|d      }| j                  t        |ddd	
            \  }}	g }
|j                  d      D ]  }|j                  d      }|j                  d      D ]  }|j                  }|r|j                  d      s#|dk(  r%|
j                  | j                  ||dd
             M|j                  d      }t        | j                  d|xs ddd             }|j                  d      }d gdz  \  }}|r8|j                  d      }t!        |      dk(  r|\  }}nt!        |      dk(  r|d   }|
j#                  |||||d         i }|j                  d      D ]I  }|j                  }|s|j%                  dg       j#                  |d||j                  d       d!       K ||	||
d"S )#Nr   r+   base_urlz/content/content_z/videosettings.xml?v=1zDownloading video settings XMLz.//Titler   T)fatalz.//MediaSources	videoTypez./MediaSourcehttpsmoothstreamingmssF	videoModez^(\d+)[pP]$ height)defaultcodecr   ,r   r   )r.   	format_idr<   acodecvcodecz.//MarkerResourceSourcer(   /type)r.   r)   )r+   r   r-   r,   )r	   _match_valid_urlr   getr   _download_xmlr   r
   findalltext
startswithextend_extract_ism_formatsr   _search_regexsplitlenappend
setdefault)r   r.   smuggled_datamobjr   video_idr4   settings_r   r,   sourcessources_typesource	video_url
video_moder<   r>   rA   rB   codecsr-   subtitle_urls                          r   _real_extractz'MicrosoftVirtualAcademyIE._real_extract2   sn   *33]$$S)JJ{+	::d# $$Z0_D4J4J9V^4_%%=ExP68 22:j'47 85 ''(9: 	G";;{3L!///: "KK	 	(<(<V(D#44NN4#<#<!8U% $= $A B#ZZ4
$T%7%7"J$4"h &8 &N O

7+"&!"[[-F6{a')/V)!'$!+$$$  '	: 	&&'@A 	F!;;L  r*11"*L9zz&)3 		 "	
 	
r   N)r   r   r    IE_NAMEIE_DESC
_VALID_URL_TESTSr^   r!   r   r   r#   r#      sp    G0G s  v}  }J M1(*#6 

 0F&>
r   r#   c                   t     e Zd ZdZdZdez  Zdddddd	d
ddddd	ddddddgZe fd       Zd Z	 xZ
S )MicrosoftVirtualAcademyCourseIEz
mva:coursez!Microsoft Virtual Academy coursesz(?:%s:|https?://(?:mva\.microsoft|(?:www\.)?microsoftvirtualacademy)\.com/[^/]+/training-courses/(?P<display_id>[^/?#&]+)-)(?P<id>\d+)zdhttps://mva.microsoft.com/en-US/training-courses/microsoft-azure-fundamentals-virtual-machines-1178811788z.Microsoft Azure Fundamentals: Virtual Machines)r+   r   $   )r.   r0   playlist_countzchttps://mva.microsoft.com/en-US/training-courses/developing-windows-10-games-with-construct-2-1633516335z,Developing Windows 10 Games with Construct 2
   zrhttps://www.microsoftvirtualacademy.com/en-US/training-courses/microsoft-azure-fundamentals-virtual-machines-11788Tr1   zmva:course:11788c                 X    t         j                  |      rdS t        t        |   |      S )NF)r#   suitablesuperrd   )clsr.   	__class__s     r   rk   z(MicrosoftVirtualAcademyCourseIE.suitable   s1    1::3?u 	@U+SF;;>-	@r   c                    | j                  |      }|j                  d      }|j                  d      }| j                  ||      }| j                  d|z  |d      d   }|d   d   d   }g }|d	   D ]  }	| j	                  |	j                  d
            \  }
}|	j                  d      }|	j                  d	g       D ]  }|j                  d      }|s|j                  di       j                  d      xs i }|j                  d      dk7  rQ| j	                  |j                  d
            \  }}t        |j                  d            }|j                  d      }|j                  dt        d|d|d|i      |||||
|d         |j                  d
      xs! |j                  di       j                  d
      }| j                  |||      S )Nr+   r   z%s/imsmanifestlite.jsonz Downloading course manifest JSONmanifestorganizationsorganizationr   itemr   z@identifierresourcemetadatalearningresourcetypeVideodurationdescriptionurl_transparentzmva::r4   )_typer.   r   ry   rx   r   chapter_number
chapter_id)
rE   r   r   r   r   rF   r   rP   r   playlist_result)r   r.   rS   r   r   r4   rp   rr   entriesr   r}   chapter_titler~   rs   item_idru   rV   r   rx   ry   s                       r   r^   z-MicrosoftVirtualAcademyCourseIE._real_extract   s   $$S)JJt$	ZZ-
)))Z@&&%0:<<FH  0@C#F+ 	G,0,K,KGKKX_L`,a)NM ]3JFB/ ((=188J377
CIr<< 677B::488G;LM5)(,,z*BC&ll=9.&'0':Z<RT"#. (,&4",
  
	2   )VX\\*b-I-M-Mg-V##GY>>r   )r   r   r    r_   r`   ra   rb   classmethodrk   r^   __classcell__)rn   s   @r   rd   rd   s   s    G1G [  ^e  eJ vE
  uC
  D "%F. @ @)?r   rd   )r   commonr   utilsr   r   r   r	   r
   r   r#   rd   r!   r   r   <module>r      sB    	 ! 
SM 
SV
 = V
rJ?&C J?r   