U
    gQ                     @   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/videoZalurazShttps://cursos.alura.com.br/course/clojure-mutabilidade-com-atoms-e-refs/task/60095Z60095mp4u   Referências, ref-set e alter)idexttitlez"Requires alura account credentials)urlZ	info_dictskipzShttps://cursos.alura.com.br/course/clojure-mutabilidade-com-atoms-e-refs/task/60098Tr   Zonly_matchingzHhttps://cursos.alura.com.br/course/fundamentos-market-digital/task/55219c              	   C   s   |  |dd\}}| j||f }| ||d}|r| ||}t| jd|ddd}g }|D ]t}	|	d}
| j|
d ddd	d
d}|D ]@}t	
d|d }|r|dst|ddkrdnd|d< q|| q`|||dS d S )NZcourse_namer   zSearching for videoszJ<span[^>]+class=(["\'])task-body-header-title-text\1[^>]*>(?P<title>[^<]+)r   groupr   Zm3u8_nativeZhlsF)Zentry_protocolZm3u8_idfatalz"^[\w \W]*-(?P<res>\w*).mp4[\W \w]*r   heightresZhdZ720Z480)r   r   formats)Z_match_valid_urlr   
_VIDEO_URLZ_download_json_download_webpager   _search_regexgetZ_extract_m3u8_formatsresearchintextend)selfr   ZcourseZvideo_id	video_urlZ
video_dictwebpageZvideo_titler   Z	video_objZvideo_url_m3u8Zvideo_formatfm r&   :/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/alura.py_real_extract$   s@      
    
 zAluraIE._real_extractc           	      C   s   |  | jd d}dd }||r$d S | |}|||d | jd|d| jdd}|d	sntj| j|}| j |d d
t	|ddid}||s| j
d|dd d}|rt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r#   r&   r'   	<genexpr>J   s     z<AluraIE._perform_login.<locals>.is_logged.<locals>.<genexpr>)zhref=[\"|\']?/signout[\"|\']z>Logout<)anyr+   r&   r+   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)r2   zUnable to login: T)expectedzUnable to log in)r   
_LOGIN_URLZ_hidden_inputsupdater   
startswithurllibparser	   r   Z_html_search_regexr   )	r!   r/   r0   Z
login_pager.   Z
login_formZpost_urlresponseerrorr&   r&   r'   _perform_loginD   sN      
   
    zAluraIE._perform_loginN)
__name__
__module____qualname__
_VALID_URLr7   r   _NETRC_MACHINE_TESTSr(   r>   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   Z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'   rF   x   s    zAluraCourseIE.suitablec              	   C   s   |  |}| ||}| jd|d|dd}g }|rtd|D ]}t||}| ||}td|D ]`}	t| jd|ddd	}
t| jd
|ddd	}t||	}d|  |||  |
|d}|	| qdq>| 
|||S )Nz;<h1.*?>(.*?)<strong>(?P<course_title>.*?)</strong></h[0-9]>zcourse titlecourse_titler1   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_numberZurl_transparent)_typer   r   Zid_keyrL   rM   )Z	_match_idr   r   r   findallr	   r   r   Zie_keyappendZplaylist_result)r!   r   Zcourse_pathr#   rK   entriespathpage_urlZsection_pathZ
path_videorL   rM   r"   entryr&   r&   r'   r(   |   sR    
   

zAluraCourseIE._real_extract)r?   r@   rA   rB   r7   rC   rD   classmethodrF   r(   __classcell__r&   r&   rI   r'   rE   n   s   rE   )r   urllib.parser:   commonr   utilsr   r   r   r   r	   r
   rE   r&   r&   r&   r'   <module>   s
   	`