
    yfe                     l    d dl Z ddlm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   )compat_urlparse)urlencode_postdataurljoinint_or_none
clean_htmlExtractorErrorc                   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                  ||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 )NzSearching for videoszJ<span[^>]+class=(["\'])task-body-header-title-text\1[^>]*>(?P<title>[^<]+)r   grouplinkr   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_url
_VIDEO_URL_download_json_download_webpager
   _search_regexget_extract_m3u8_formatsresearchintr   extend)selfr   coursevideo_id	video_url
video_dictwebpagevideo_titler(   	video_objvideo_url_m3u8video_formatfms                 8/usr/lib/python3/dist-packages/yt_dlp/extractor/alura.py_real_extractzAluraIE._real_extract(   s?   005OOvx&88	((H>TU
,,S(;G$T%7%7] &8 &1 2K G' 
-	!*v!6#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                  |d d	t        |      d
di      } ||      s2| j                  d|dd       }|rt        d|z  d      t        d      y )NzDownloading login popupc                 ,     t         fddD              S )Nc              3   J   K   | ]  }t        j                  |        y w)N)r0   r1   ).0pr9   s     r@   	<genexpr>z<AluraIE._perform_login.<locals>.is_logged.<locals>.<genexpr>N   s       ryyG, s    #)zhref=[\"|\']?/signout[\"|\']z>Logout<)any)r9   s   `r@   	is_loggedz)AluraIE._perform_login.<locals>.is_loggedM   s      7   rB   )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)rN   zUnable to login: %sT)expectedzUnable to log in)r,   
_LOGIN_URL_hidden_inputsupdater-   
startswithr   r   r   _html_search_regexr   )	r4   rK   rL   
login_pagerJ   
login_formpost_urlresponseerrors	            r@   _perform_loginzAluraIE._perform_loginH   s'   ++OOT#<>
	 Z ((4
  
 	
 %%VXbu & > ""6*&..tIH))dL#J/#%HI * K
 "++B/4 , 9E $%:U%BTRR !344 #rB   N)
__name__
__module____qualname__
_VALID_URLrS   r*   _NETRC_MACHINE_TESTSrA   r]    rB   r@   r   r      s_    gJQJFJNd4

 56 i!	#
 ^!	#F"@'5rB   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                 X    t         j                  |      rdS t        t        |   |      S )NF)r   suitablesuperrf   )clsr   	__class__s     r@   ri   zAluraCourseIE.suitable|   s(    ((-uZ53UVY3ZZrB   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_titlerM   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_keyro   rp   )	_match_idr,   r-   r0   findallr   r
   r	   ie_keyappendplaylist_result)r4   r   course_pathr9   rn   entriespathpage_urlsection_path
path_videoro   rp   r7   entrys                 r@   rA   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GrB   )r^   r_   r`   ra   rS   rb   rc   classmethodri   rA   __classcell__)rl   s   @r@   rf   rf   r   s@    MJQJ"NY F
 [ ['HrB   rf   )r0   commonr   compatr   utilsr   r   r	   r
   r   r   rf   rd   rB   r@   <module>r      s7    	 ! ]5m ]5@5HG 5HrB   