
    V|h                          S SK r SSKJr  SSKJrJrJrJrJrJ	r	J
r
JrJr   " S S\5      r " S S	\5      r " S
 S\5      r " S S\5      rg)    N   )InfoExtractor   )	ExtractorError
clean_htmldetermine_extfloat_or_noneint_or_nonestr_or_noneurl_or_noneurlencode_postdataurljoinc                   &    \ rS rSrSrSrSrS rSrg)LecturioBaseIE   z-https://app.lecturio.com/api/en/latest/html5/z!https://app.lecturio.com/en/loginlecturioc                 B  ^  T R                  T R                  S S5      u  p4U 4S jnU" U5      (       a  g UUSS.nT R                  T R                  S S[        U5      S9u  ptU" U5      (       a  g T R                  SUSS S	9nU(       a  [	        S
U 3SS9e[	        S5      e)NzDownloading login popupc                 6   > TR                   U R                  ;  $ )N)
_LOGIN_URLurl)
url_handleselfs    S/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/lecturio.py	is_logged0LecturioBaseIE._perform_login.<locals>.is_logged   s    ??*..88    on)zsignin[email]zsignin[password]zsignin[remember]z
Logging in)dataz1(?s)<ul[^>]+class=["\']error_list[^>]+>(.+?)</ul>errorsdefaultzUnable to login: T)expectedzUnable to log in)_download_webpage_handler   r   _html_search_regexr   )	r   usernamepassword_urlhr   
login_formresponser   s	   `        r   _perform_loginLecturioBaseIE._perform_login   s    //OOT#<>	9 T?? & ( $

 66OOT<#J/ 7 1
 T??((@(d ) $  #4VH!=MM/00r    N)	__name__
__module____qualname____firstlineno___API_BASE_URLr   _NETRC_MACHINEr+   __static_attributes__r-   r   r   r   r      s    CM4JN1r   r   c                   j    \ rS rSrSrSSSSSS.S	S
.SSS.SSS.SSS./rSSSSSSSSSSSS.rS rSrg)
LecturioIE8   a?  (?x)
                    https://
                        (?:
                            app\.lecturio\.com/([^/?#]+/(?P<nt>[^/?#&]+)\.lecture|(?:\#/)?lecture/c/\d+/(?P<id>\d+))|
                            (?:www\.)?lecturio\.de/(?:[^/?#]+/)+(?P<nt_de>[^/?#&]+)\.vortrag
                        )
                    zuhttps://app.lecturio.com/medical-courses/important-concepts-and-terms-introduction-to-microbiology.lecture#tab/videos 9a42cf1d8282a6311bf7211bbde26fde39634mp4u=   Important Concepts and Terms — Introduction to Microbiology)idexttitle%Requires lecturio account credentials)r   md5	info_dictskipzEhttps://www.lecturio.de/jura/oeffentliches-recht-staatsexamen.vortragTr   only_matchingzkhttps://www.lecturio.de/jura/oeffentliches-recht-at-1-staatsexamen/oeffentliches-recht-staatsexamen.vortragz/https://app.lecturio.com/#/lecture/c/6434/39634arbgdeenesfafrjaplpsru)Arabic	BulgarianGermanEnglishSpanishPersianFrenchJapanesePolishPashtoRussianc           	      J   U R                  U5      nUR                  S5      =(       d    UR                  S5      nUR                  S5      nU=(       d    UnU(       a  SU-   OSU-   S-   nU R                  U R                  U-   U5      nUS   R	                  5       nU(       d\  UR                  S5      =(       d    UR                  S	5      n	U	(       a,  U	R                  S
5      n
U
(       a  [        U
5      S:X  a  U
S   n/ nUS   S    GH  n[        U[        5      (       d  M  UR                  S5      nU(       d  M5  [        U5      nUS:X  a  MH  [        U5      nU(       d  M\  [        UR                  S5      5      n[        UR                  S5      5      nUU[        USS9S.nU(       aY  [        R                   " SU5      nU(       a;  UR#                  UR                  S5      [%        UR                  S5      5      S.5        UR'                  U5        GM     0 n0 nUR                  S5      =(       d    / nU H  nUR                  S5      nU(       d  M  UR                  S5      nUR                  S5      =(       d,    U R)                  SUSU(       a  UR                  5       S   OSS 9nU R)                  S!US"S S 9nS#U;   d  U(       a  UOUnUR+                  U R,                  R                  UU5      / 5      R'                  SU05        M     U=(       d    UUUUUS$.$ )%Nntnt_der;   z	lectures/zlecture/.jsonr=   	productIduidr'   r   r   contentmediafilesmillabelfileSizei  )invscale)r   	format_idfilesizez(\d+)p\s*\(([^)]+)\))rg   heightcaptionsr   translatedCodelanguageCodez/([a-z]{2})_langr   rG   r    z/[a-z]{2}_([a-z]{2})_zoriginal langzauto-translated)r;   r=   formats	subtitlesautomatic_captions)_match_valid_urlgroup_download_jsonr2   stripgetsplitlen
isinstancedictr   r   r   r
   r	   rematchupdateintappend_search_regex
setdefault	_CC_LANGS)r   r   mobjr[   
lecture_id
display_idapi_pathvideor=   pidspidrn   format_file_r<   file_urlrd   rh   fro   rp   rj   cccc_urlcc_labelrm   original_langsub_dicts                               r   _real_extractLecturioIE._real_extractb   s   $$S)ZZ4G!4ZZ%
%:
/9;+zBQX?X##):7g$$&))K(<EIIe,<Cyy~CIN!%aJY'0Ggt,,KK'E&Cf}"5)HG 45E"7;;z#:;H")(TBA
 xx 7?HH%)ZZ]"%djjm"4  NN17 1: 	99Z(.BBVVE]Fvv./H66.) CT-?-?/7(+T .@ .CD !..(&/ / M -8M +&   2 24 >CJJvL  & """4
 	
r   r-   N)	r.   r/   r0   r1   
_VALID_URL_TESTSr   r   r4   r-   r   r   r6   r6   8   s    J G1T

 8	 W } AF* II
r   r6   c                   >    \ rS rSrSrSSSSS.SS	S
.SSS./rS rSrg)LecturioCourseIE   zZhttps?://app\.lecturio\.com/(?:[^/]+/(?P<nt>[^/?#&]+)\.course|(?:#/)?course/c/(?P<id>\d+))zKhttps://app.lecturio.com/medical-courses/microbiology-introduction.course#/zmicrobiology-introductionzMicrobiology: Introductionz$md5:13da8500c25880c6016ae1e6d78c386a)r;   r=   description-   r>   )r   r@   playlist_countrA   z(https://app.lecturio.com/#/course/c/6434TrB   c           
      Z   U R                  U5      R                  5       u  p#U=(       d    UnU(       a  SU-   OSU-   S-   nU R                  U R                  U-   U5      n/ nUR	                  S/ 5       H{  n[        UR	                  S5      5      n	UR	                  S5      n
U
(       a  [        X5      n
OSU SU	 3n
UR                  U R                  U
[        R                  5       U	S	95        M}     U R                  XtUR	                  S
5      [        UR	                  S5      5      5      $ )Nzcourses/zcourse/content/r]   lecturesr;   r   z%https://app.lecturio.com/#/lecture/c//ievideo_idr=   r   )rq   groupsrs   r2   ru   r   r   r~   
url_resultr6   ie_keyplaylist_resultr   )r   r   r[   	course_idr   r   courseentrieslecturer   lecture_urls              r   r   LecturioCourseIE._real_extract   s    --c299;_9
-6:	)<MPR<RU\<\$$):7zz*b1G$W[[%67J!++e,K%c7 Ei[PQR\Q]^NN4??
 1 1 3j + J K 2 ##G!4vzz-013 	3r   r-   N)r.   r/   r0   r1   r   r   r   r4   r-   r   r   r   r      s>    nJ\-1A

 7	 :F3r   r   c                   (    \ rS rSrSrSSS.rS rSrg)	LecturioDeCourseIE   z<https?://(?:www\.)?lecturio\.de/[^/]+/(?P<id>[^/?#&]+)\.kursz-https://www.lecturio.de/jura/grundrechte.kursTrB   c           	         U R                  U5      nU R                  X5      n/ n[        R                  " SU5       H`  n[	        XR                  S5      5      nUR                  S5      nUR                  U R                  U[        R                  5       US95        Mb     U R                  SUSS S9nU R                  XBU5      $ )Nze(?s)<td[^>]+\bdata-lecture-id=["\'](?P<id>\d+).+?\bhref=(["\'])(?P<url>(?:(?!\2).)+\.vortrag)\b[^>]+>r   r;   r   z<h1[^>]*>([^<]+)r=   r    )	_match_id_download_webpagerz   finditerr   rr   r~   r   r6   r   r   r   )	r   r   r   webpager   r   r   r   r=   s	            r   r    LecturioDeCourseIE._real_extract   s    ^^C(
((9KKxD "#zz%'89KD)JNN4??
 1 1 3j + J K ""'4 # A ##G??r   r-   N)r.   r/   r0   r1   r   _TESTr   r4   r-   r   r   r   r      s    PJ>E
@r   r   )rz   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r6   r   r   r-   r   r   <module>r      sQ    	 !
 
 
$1] $1Ns
 s
l"3~ "3J@ @r   