
    V|hQ                     h    S SK r S SKrSSKJr  SSKJrJrJrJ	r	J
r
   " S S\5      r " S S	\5      rg)
    N   )InfoExtractor   )ExtractorError
clean_htmlint_or_noneurlencode_postdataurljoinc                   V    \ rS rSrSrSrSrSrSSSS	S
.SS.SSS.SSS./rS r	S r
Srg)AluraIE   zShttps?://(?:cursos\.)?alura\.com\.br/course/(?P<course_name>[^/]+)/task/(?P<id>\d+)>https://cursos.alura.com.br/loginForm?urlAfterLogin=/loginFormz3https://cursos.alura.com.br/course/%s/task/%s/videoalurazShttps://cursos.alura.com.br/course/clojure-mutabilidade-com-atoms-e-refs/task/6009560095mp4u   Referências, ref-set e alter)idexttitlez"Requires alura account credentials)url	info_dictskipzShttps://cursos.alura.com.br/course/clojure-mutabilidade-com-atoms-e-refs/task/60098Tr   only_matchingzHhttps://cursos.alura.com.br/course/fundamentos-market-digital/task/55219c           
      T   U R                  U5      R                  SS5      u  p#U R                  X#4-  nU R                  XCS5      nU(       a  U R	                  X5      n[        U R                  SUSSS95      n/ nU H  n	U	R                  S5      n
U R                  U
S SSS	S
S9nU Hc  n[        R                  " SUS   5      nU(       d  M&  UR                  S5      (       a  M>  [        UR                  S5      S:X  a  SOS5      US'   Me     UR                  U5        M     UUUS.$ g )Ncourse_namer   zSearching for videoszJ<span[^>]+class=(["\'])task-body-header-title-text\1[^>]*>(?P<title>[^<]+)r   groupr   m3u8_nativehlsF)entry_protocolm3u8_idfatalz"^[\w \W]*-(?P<res>\w*).mp4[\W \w]*r   heightreshd720480)r   r   formats)_match_valid_urlr   
_VIDEO_URL_download_json_download_webpager   _search_regexget_extract_m3u8_formatsresearchintextend)selfr   coursevideo_id	video_url
video_dictwebpagevideo_titler(   	video_objvideo_url_m3u8video_formatfms                 P/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/alura.py_real_extractAluraIE._real_extract$   s<   005;;M4POOv&88	((>TU
,,S;G$T%7%7] &8 &1 2K G'	!*u!5#99"D%!  :  0 &A		"G5RAq uuX*-qwwu~7MeSX*YAhK	 &
 |, ( $" '     c                    U R                  U R                  S S5      nS nU" U5      (       a  g U R                  U5      nUR                  UUS.5        U R	                  SUSU R                  SS9nUR                  S5      (       d*  [        R                  R                  U R                  U5      nU R                  US S	[        U5      S
S0S9nU" U5      (       d1  U R                  SUSS S9nU(       a  [        SU 3SS9e[        S5      eg )NzDownloading login popupc                 .   ^  [        U 4S jS 5       5      $ )Nc              3   R   >#    U  H  n[         R                  " UT5      v   M     g 7f)N)r0   r1   ).0pr9   s     r@   	<genexpr><AluraIE._perform_login.<locals>.is_logged.<locals>.<genexpr>J   s'       7ryyG,, 7s   $')zhref=[\"|\']?/signout[\"|\']z>Logout<)any)r9   s   `r@   	is_logged)AluraIE._perform_login.<locals>.is_loggedI   s      7   rC   )usernamepasswordzG<form[^>]+class=["|\']signin-form["|\'] action=["|\'](?P<url>.+?)["|\']zpost urlr   defaultr   httpz
Logging inzContent-Typez!application/x-www-form-urlencoded)dataheadersz/(?s)<p[^>]+class="alert-message[^"]*">(.+?)</p>zerror message)rQ   zUnable to login: T)expectedzUnable to log in)r,   
_LOGIN_URL_hidden_inputsupdater-   
startswithurllibparser
   r	   _html_search_regexr   )	r4   rN   rO   
login_pagerL   
login_formpost_urlresponseerrors	            r@   _perform_loginAluraIE._perform_loginD   s6   ++OOT#<>
	 Z  ((4
  
 	
 %%VXbu & > ""6**||++DOOXFH))dL#J/#%HI * K
 ""++B/4 , 9E $'8%@4PP !344 #rC    N)__name__
__module____qualname____firstlineno__
_VALID_URLrV   r*   _NETRC_MACHINE_TESTSrA   rb   __static_attributes__rd   rC   r@   r   r      s_    gJQJFJNd4

 56 i!	#
 ^!	#F"@'5rC   r   c                   P   ^  \ rS rSrSrSrSrSSS./r\U 4S j5       r	S	 r
S
rU =r$ )AluraCourseIEn   z9https?://(?:cursos\.)?alura\.com\.br/course/(?P<id>[^/]+)r   aluracoursezHhttps://cursos.alura.com.br/course/clojure-mutabilidade-com-atoms-e-refsTr   c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ )NF)r   suitablesuper)clsr   	__class__s     r@   rr   AluraCourseIE.suitablex   s(    ((--uH573CC3HHrC   c                 B   U R                  U5      nU R                  X5      nU R                  SUSUSS9n/ nU(       a  [        R                  " SU5       H  n[        X5      nU R                  Xr5      n[        R                  " SU5       H{  n	[        U R                  SUSSS	95      n
[        U R                  S
USSS	95      n[        X5      nSU R                  U5      UU R                  5       U
US.nUR                  U5        M}     M     U R                  XRU5      $ )Nz;<h1.*?>(.*?)<strong>(?P<course_title>.*?)</strong></h[0-9]>zcourse titlecourse_titlerP   zW<a\b(?=[^>]* class="[^"]*(?<=[" ])courseSectionList-section[" ])(?=[^>]* href="([^"]*))z[<a\b(?=[^>]* class="[^"]*(?<=[" ])task-menu-nav-item-link-VIDEO[" ])(?=[^>]* href="([^"]*))zK<h3[^>]+class=(["\'])task-menu-section-title-text\1[^>]*>(?P<chapter>[^<]+)chapterr   zj<span[^>]+class=(["\'])task-menu-section-title-number[^>]*>(.*?)<strong>(?P<chapter_number>[^<]+)</strong>zchapter numberchapter_numberurl_transparent)_typer   r   id_keyry   rz   )	_match_idr,   r-   r0   findallr
   r   r   ie_keyappendplaylist_result)r4   r   course_pathr9   rx   entriespathpage_urlsection_path
path_videory   rz   r7   entrys                 r@   rA   AluraCourseIE._real_extract|   sW   nnS)((:))JGK~ * G 

#}  @G  H"3-#55hL"$**  .L  NZ  #[J(**j(%"+	 + -.G &1** J(,"2	 + 4&5N !( 8I "3"nnY7("&++-#**8E NN5)1 #[ H8 ##G,GGrC   rd   )re   rf   rg   rh   ri   rV   rj   rk   classmethodrr   rA   rl   __classcell__)ru   s   @r@   rn   rn   n   sF    MJQJ"NY F
 I I'H 'HrC   rn   )r0   urllib.parserZ   commonr   utilsr   r   r   r	   r
   r   rn   rd   rC   r@   <module>r      s5    	  ! ]5m ]5@5HG 5HrC   