
    V|h%                         S SK r S SKrS SKrSSKJr  SSKJrJr   " S S\5      r	 " S S	\	5      r
 " S
 S\	5      r " S S\	5      rg)    N   )InfoExtractor   )ExtractorErrorupdate_url_queryc                   .    \ rS rSrSrSrSrSrSrS r	Sr
g	)
SafariBaseIE   z,https://learning.oreilly.com/accounts/login/safariz#https://learning.oreilly.com/api/v1jsonFc                 >   U R                  SS S5      u  p4S nU" U5      (       a  SU l        g UR                  n[        R                  R                  U5      n[        R                  R                  UR                  5      n[        R                  R                  SUS   S   5      n	U R                  SS S	[        R                  " UUU	S
.5      R                  5       SUS.SS9u  pU
R                  S5      nU
R                  S5      (       d*  U
R                  S5      (       d  U(       a  [        SU 3SS9eS H  nU R                  XL5        M     U R                  U
R                  S5      =(       d    U	S S5      u  p4U" U5      (       a  SU l        g [        S5      e)Nz2https://learning.oreilly.com/accounts/login-check/zDownloading login pagec                      SU R                   ;   $ )Nzlearning.oreilly.com/home/)url)urlhs    Q/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/safari.py	is_logged.SafariBaseIE._perform_login.<locals>.is_logged   s    /488;;    Tzhttps://api.oreilly.comnextr   z*https://www.oreilly.com/member/auth/login/z
Logging in)emailpasswordredirect_uriapplication/json)zContent-TypeRefereri  )dataheadersexpected_statuscredentials	logged_inr   zUnable to login: expected)groot_sessionidzorm-jwtzorm-rtzCompleting loginzUnable to log in)_download_webpage_handle	LOGGED_INr   urllibparseurlparseparse_qsqueryurljoin_download_json_handler   dumpsencodegetr   _apply_first_set_cookie_header)selfusernamer   _r   r   redirect_url
parsed_urlqsnext_uriauthr   cookies                r   _perform_loginSafariBaseIE._perform_login   s   //@$$&	< T??!DNxx\\**<8
\\"":#3#34<<''%r&z!}6 //8$!$ (  vx 2'"  # 0 	$
 hh}-%%dhh~.F.F #K=1DB B
 ?F//= ? //HH^$0$8JL T??!DN/00r   )r$   N)__name__
__module____qualname____firstlineno__
_LOGIN_URL_NETRC_MACHINE	_API_BASE_API_FORMATr$   r9   __static_attributes__ r   r   r	   r	      s     ?JN5IKI/1r   r	   c            	       r    \ rS rSrSrSrSrSSSSS	S
SSS.S.SSS.SSS.SSS.SSS.SSS./rSrSr	S r
Srg)SafariIEG   r   z"safaribooksonline.com online videoa  (?x)
                        https?://
                            (?:www\.)?(?:safaribooksonline|(?:learning\.)?oreilly)\.com/
                            (?:
                                library/view/[^/]+/(?P<course_id>[^/]+)/(?P<part>[^/?\#&]+)\.html|
                                videos/[^/]+/[^/]+/(?P<reference_id>[^-]+-[^/?\#&]+)
                            )
                    zhhttps://www.safaribooksonline.com/library/view/hadoop-fundamentals-livelessons/9780133392838/part00.html dcc5a425e79f2564148652616af1f2a3
0_qbqx90icmp4z/Introduction to Hadoop Fundamentals LiveLessonsijrU20150724stork)idexttitle	timestampupload_dateuploader_id)r   md5	info_dictzYhttps://www.safaribooksonline.com/library/view/create-a-nodejs/100000006A0210/part00.htmlTr   only_matchingzehttps://www.safaribooksonline.com/library/view/learning-path-red/9780134664057/RHCE_Introduction.htmlzkhttps://www.safaribooksonline.com/videos/python-programming-language/9780134217314/9780134217314-PYMC_13_00znhttps://learning.oreilly.com/videos/hadoop-fundamentals-livelessons/9780133392838/9780133392838-00_SeriesIntrozfhttps://www.oreilly.com/library/view/hadoop-fundamentals-livelessons/9780133392838/00_SeriesIntro.html192608129375172c           	      *   U R                  U5      nUR                  S5      nU(       a  UnU R                  nU R                  nOSR	                  UR                  S5      UR                  S5      5      nU R                  X5      u  px[        R                  " U R                  UR                  5      nUR                  S5      nU(       d  U R                  SUSSS9nU R                  S	US
U R                  SS9nU R                  SUSU R                  SS9nSU 3UUS.n	U R                  (       aH  U R                  U R                   SU 3USSSSS0S9n
U
(       a  U
R                  S5      nU(       a  XS'   U R                  [!        SU	5      S5      $ )Nreference_idz{}-{}	course_idpartz/data-reference-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura reference idrM   )groupz-data-partner-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura widget id)defaultr]   z(data-ui-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura uiconf idr2   )wid	uiconf_idzflashvars[referenceId]z&/player/kaltura_session/?reference_id=z Downloading kaltura session JSONz'Unable to download kaltura session JSONFAcceptr   )fatalr   sessionzflashvars[ks]zEhttps://cdnapisec.kaltura.com/html5/html5lib/v2.37.1/mwEmbedFrame.phpKaltura)_match_valid_urlr]   _PARTNER_ID
_UICONF_IDformatr#   rematch
_VALID_URLr   _search_regexr$   _download_jsonrA   r.   
url_resultr   )r0   r   mobjrZ   video_id
partner_idui_idwebpager   r)   kaltura_sessionrc   s               r   _real_extractSafariIE._real_extracts   s   $$S)zz.1#H))JOOE~~djj&=tzz&?QRH 99#HMG88DOOTXX6D::n5L#11F34  2  A ++@,d6F6F , J &&;,doo ' E zl#&2
 >>"11>>""HW<9!#56	 2 8O
 )--i8-4/*/SUZ \ 	r   rD   N)r;   r<   r=   r>   IE_NAMEIE_DESCrk   _TESTSrf   rg   ru   rC   rD   r   r   rF   rF   G   s    G2GJ z1F#%"
 k
 w } @ x1F: KJ/r   rF   c                   6    \ rS rSrSrSrSSS.SSS./rS rS	rg
)SafariApiIE   z
safari:apizhttps?://(?:www\.)?(?:safaribooksonline|(?:learning\.)?oreilly)\.com/api/v1/book/(?P<course_id>[^/]+)/chapter(?:-content)?/(?P<part>[^/?#&]+)\.htmlzOhttps://www.safaribooksonline.com/api/v1/book/9780133392838/chapter/part00.htmlTrU   zZhttps://www.safaribooksonline.com/api/v1/book/9780134664057/chapter/RHCE_Introduction.htmlc           	      ~   U R                  U5      nU R                  USR                  UR                  S5      UR                  S5      5      S5      nUS   nSU;   a=  UR	                  SS5      nUS   nUR                  S	S
5      S    S	US    SUS
   S S  3nU R                  U[        R                  5       5      $ )Nz{}/{}r[   r\   zDownloading part JSONweb_urlzlibrary/viewvideosnatural_key/r   r   -)	re   rm   rh   r]   replacersplitrn   rF   ie_key)r0   r   ro   r\   r~   natural_keyss         r   ru   SafariApiIE._real_extract   s    $$S)""

; 7F9KL#% y/W$oonh?G.L Q/231\!_4EQ|TUWZXZG[F\]Gw(9::r   rD   N)	r;   r<   r=   r>   rw   rk   ry   ru   rC   rD   r   r   r{   r{      s7    G hJ a lF
;r   r{   c                      ^  \ rS rSrSrSrSrSSSS.S	S
S.SSS.SSS.SSS.SSS.SSS./r\U 4S j5       r	S r
SrU =r$ )SafariCourseIE   zsafari:coursez$safaribooksonline.com online coursesa  (?x)
                    https?://
                        (?:
                            (?:www\.)?(?:safaribooksonline|(?:learning\.)?oreilly)\.com/
                            (?:
                                library/view/[^/]+|
                                api/v1/book|
                                videos/[^/]+
                            )|
                            techbus\.safaribooksonline\.com
                        )
                        /(?P<id>[^/]+)
                    z]https://www.safaribooksonline.com/library/view/hadoop-fundamentals-livelessons/9780133392838/9780133392838zHadoop Fundamentals LiveLessons)rM   rO      z.Requires safaribooksonline account credentials)r   rT   playlist_countskipzQhttps://www.safaribooksonline.com/api/v1/book/9781449396459/?override_format=jsonTrU   z2http://techbus.safaribooksonline.com/9780134426365zRhttps://www.safaribooksonline.com/videos/python-programming-language/9780134217314zQhttps://learning.oreilly.com/videos/hadoop-fundamentals-livelessons/9780133392838zShttps://www.oreilly.com/library/view/hadoop-fundamentals-livelessons/9780133392838/c                    > [         R                  U5      (       d  [        R                  U5      (       a  S$ [        TU ]  U5      $ )NF)rF   suitabler{   super)clsr   	__class__s     r   r   SafariCourseIE.suitable   s=    !**3//;3G3G3L3L 	,W%c*	,r   c                 N   U R                  U5      nU R                  U R                   SU SU R                   3US5      nSU;  a  [	        SU 3SS9eUS    Vs/ s H'  nU R                  U[        R                  5       5      PM)     nnUS   nU R                  XRU5      $ s  snf )	Nz/book/z/?override_format=zDownloading course JSONchapterszNo chapters found for course Tr    rO   )		_match_idrm   rA   rB   r   rn   r{   r   playlist_result)r0   r   r[   course_jsonchapterentriescourse_titles          r   ru   SafariCourseIE._real_extract   s    NN3'	))~~fYK/A$BRBRAST02 [( /	{;dL L
 'z242 OOG[%7%7%9:2 	 4 #7+##GEE4s   .B"rD   )r;   r<   r=   r>   rw   rx   rk   ry   classmethodr   ru   rC   __classcell__)r   s   @r   r   r      s    G4GJ o!6
 @ c D d c e)F2 , ,F Fr   r   )r   ri   urllib.parser%   commonr   utilsr   r   r	   rF   r{   r   rD   r   r   <module>r      sN     	  !81= 81v[| [|;, ;2AF\ AFr   