o
    iQ                     @   s\   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 deZG dd	 d	eZdS )
    N   )InfoExtractor   )ExtractorError
clean_htmlint_or_noneurlencode_postdataurljoinc                   @   sR   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d Zdd Z	dS )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              	   C   s   |  |dd\}}| j||f }| ||d}|rq| ||}t| jd|ddd}g }|D ]:}	|	d}
| j|
d ddd	d
d}|D ] }t	
d|d }|rd|dsdt|ddkr_dnd|d< qD|| q0|||dS d S )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m r<   J/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/alura.py_real_extract$   s8   

zAluraIE._real_extractc           	      C   s   |  | jd d}dd }||rd S | |}|||d | jd|d| jdd}|d	s7tj| j|}| j |d d
t	|ddid}||sa| j
d|dd d}|r]td| ddtdd S )NzDownloading login popupc                    s   t  fdddD S )Nc                 3   s    | ]	}t | V  qd S )N)r,   r-   ).0pr5   r<   r=   	<genexpr>J   s    z<AluraIE._perform_login.<locals>.is_logged.<locals>.<genexpr>)zhref=[\"|\']?/signout[\"|\']z>Logout<)anyrA   r<   rA   r=   	is_loggedI   s   z)AluraIE._perform_login.<locals>.is_logged)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)rH   zUnable to login: T)expectedzUnable to log in)r(   
_LOGIN_URL_hidden_inputsupdater)   
startswithurllibparser	   r   _html_search_regexr   )	r0   rE   rF   
login_pagerD   
login_formpost_urlresponseerrorr<   r<   r=   _perform_loginD   s>   

zAluraIE._perform_loginN)
__name__
__module____qualname__
_VALID_URLrM   r&   _NETRC_MACHINE_TESTSr>   rY   r<   r<   r<   r=   r
      s*    
 r
   c                       s@   e Zd ZdZdZdZdddgZe fddZd	d
 Z	  Z
S )AluraCourseIEz9https?://(?:cursos\.)?alura\.com\.br/course/(?P<id>[^/]+)r   aluracoursezHhttps://cursos.alura.com.br/course/clojure-mutabilidade-com-atoms-e-refsTr   c                    s   t |rdS t |S )NF)r
   suitablesuper)clsr   	__class__r<   r=   rb   x   s   zAluraCourseIE.suitablec              	   C   s   |  |}| ||}| jd|d|dd}g }|rdtd|D ]D}t||}| ||}td|D ]0}	t| jd|ddd	}
t| jd
|ddd	}t||	}d|  |||  |
|d}|	| q2q| 
|||S )Nz;<h1.*?>(.*?)<strong>(?P<course_title>.*?)</strong></h[0-9]>zcourse titlecourse_titlerG   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_keyrh   ri   )	_match_idr(   r)   r,   findallr	   r   r   ie_keyappendplaylist_result)r0   r   course_pathr5   rg   entriespathpage_urlsection_path
path_videorh   ri   r3   entryr<   r<   r=   r>   |   sN   


zAluraCourseIE._real_extract)rZ   r[   r\   r]   rM   r^   r_   classmethodrb   r>   __classcell__r<   r<   re   r=   r`   n   s    r`   )r,   urllib.parserQ   commonr   utilsr   r   r   r   r	   r
   r`   r<   r<   r<   r=   <module>   s    	`