
    VGhQ                     h    d dl Z 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y)
    N   )InfoExtractor   )ExtractorError
clean_htmlint_or_noneurlencode_postdataurljoinc                   N    e Zd ZdZdZdZdZddddd	d
dddddddgZd Zd Z	y)AluraIEzShttps?://(?: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           	      :   | j                  |      j                  dd      \  }}| j                  ||fz  }| j                  ||d      }|r| j	                  ||      }t        | j                  d|dd            }g }|D ]  }	|	j                  d      }
| j                  |
d ddd	d
      }|D ]T  }t        j                  d|d         }|s|j                  d      r1t        |j                  d      dk(  rdnd      |d<   V |j                  |        |||dS y )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                 _/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/alura.py_real_extractzAluraIE._real_extract$   sL   005;;M4POOvx&88	((H>TU
,,S(;G$T%7%7] &8 &1 2K G' 
-	!*u!5#99"D%!  :  0 & ZA		"G5RA uuX*-qwwu~7MeSX*YAhK	Z
 |,
- $" '     c                    | j                  | j                  d d      }d } ||      ry | j                  |      }|j                  ||d       | j	                  d|d| j                  d      }|j                  d      s*t        j                  j                  | j                  |      }| j                  |d d	t        |      d
di      } ||      s2| j                  d|dd       }|rt        d| d      t        d      y )NzDownloading login popupc                 ,     t         fddD              S )Nc              3   J   K   | ]  }t        j                  |        y w)N)r/   r0   ).0pr8   s     r?   	<genexpr>z<AluraIE._perform_login.<locals>.is_logged.<locals>.<genexpr>J   s       ryyG, s    #)zhref=[\"|\']?/signout[\"|\']z>Logout<)any)r8   s   `r?   	is_loggedz)AluraIE._perform_login.<locals>.is_loggedI   s      7   rA   )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)rM   zUnable to login: T)expectedzUnable to log in)r+   
_LOGIN_URL_hidden_inputsupdater,   
startswithurllibparser
   r	   _html_search_regexr   )	r3   rJ   rK   
login_pagerI   
login_formpost_urlresponseerrors	            r?   _perform_loginzAluraIE._perform_loginD   s-   ++OOT#<>
	 Z ((4
  
 	
 %%VXbu & > ""6*||++DOOXFH))dL#J/#%HI * K
 "++B/4 , 9E $'8%@4PP !344 #rA   N)
__name__
__module____qualname__
_VALID_URLrR   r)   _NETRC_MACHINE_TESTSr@   r^    rA   r?   r   r      s_    gJQJFJNd4

 56 i!	#
 ^!	#F"@'5rA   r   c                   F     e Zd ZdZdZdZdddgZe fd       Zd Z	 xZ
S )	AluraCourseIEz9https?://(?:cursos\.)?alura\.com\.br/course/(?P<id>[^/]+)r   aluracoursezHhttps://cursos.alura.com.br/course/clojure-mutabilidade-com-atoms-e-refsTr   c                 P    t         j                  |      rdS t        |   |      S )NF)r   suitablesuper)clsr   	__class__s     r?   rj   zAluraCourseIE.suitablex   s%    ((-uH573CC3HHrA   c           
      H   | j                  |      }| j                  ||      }| j                  d|d|d      }g }|rt        j                  d|      D ]  }t        ||      }| j                  ||      }t        j                  d|      D ]  }	t        | j                  d|dd	            }
t        | j                  d
|dd	            }t        ||	      }d| j                  |      || j                         |
|d}|j                  |         | j                  |||      S )Nz;<h1.*?>(.*?)<strong>(?P<course_title>.*?)</strong></h[0-9]>zcourse titlecourse_titlerL   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_keyrp   rq   )	_match_idr+   r,   r/   findallr
   r   r   ie_keyappendplaylist_result)r3   r   course_pathr8   ro   entriespathpage_urlsection_path
path_videorp   rq   r6   entrys                 r?   r@   zAluraCourseIE._real_extract|   si   nnS)((k:))JGK~ * G 

#}  @G  H *"3-#55hL"$**  .L  NZ  #[ *J(**j(%"+	 + -.G &1** J(,"2	 + 4&5N !(Z 8I "3"nnY7("&++-#**8E NN5)1**8 ##G[,GGrA   )r_   r`   ra   rb   rR   rc   rd   classmethodrj   r@   __classcell__)rm   s   @r?   rg   rg   n   s@    MJQJ"NY F
 I I'HrA   rg   )r/   urllib.parserV   commonr   utilsr   r   r   r	   r
   r   rg   re   rA   r?   <module>r      s5    	  ! ]5m ]5@5HG 5HrA   