
    VGh%                         d dl Z d dlZd dlZddlmZ ddlmZmZ  G d de      Z	 G d d	e	      Z
 G d
 de	      Z G d de	      Zy)    N   )InfoExtractor   )ExtractorErrorupdate_url_queryc                   &    e Zd ZdZdZdZdZdZd Zy)SafariBaseIEz,https://learning.oreilly.com/accounts/login/safariz#https://learning.oreilly.com/api/v1jsonFc                    | j                  dd d      \  }}d } ||      rd| _        y |j                  }t        j                  j                  |      }t        j                  j                  |j                        }t        j                  j                  d|d   d         }	| j                  dd d	t        j                  |||	d
      j                         d|dd      \  }
}|
j                  d      }|
j                  d      s#|
j                  d      s|rt        d| d      dD ]  }| j                  ||        | j                  |
j                  d      xs |	d d      \  }} ||      rd| _        y t        d      )Nz2https://learning.oreilly.com/accounts/login-check/zDownloading login pagec                     d| j                   v S )Nzlearning.oreilly.com/home/)url)urlhs    `/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/safari.py	is_loggedz.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_loginzSafariBaseIE._perform_login   s   //@$$&4	< T?!DNxx\\**<8
\\"":#3#34<<''%r&z!}6 //8$!$ (  vx 2'"  # 0 	$
d hh}-%dhh~.F #K=1DB B
 ? 	>F//f=	> //HH^$0$8JL4 T?!DN/00r   N)	__name__
__module____qualname__
_LOGIN_URL_NETRC_MACHINE	_API_BASE_API_FORMATr"   r7    r   r   r	   r	      s     ?JN5IKI/1r   r	   c            	       j    e Zd ZdZdZdZdddddd	d
ddddddddddddddddddgZdZdZd Z	y)SafariIEr
   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           	         | j                  |      }|j                  d      }|r|}| j                  }| j                  }ndj	                  |j                  d      |j                  d            }| j                  ||      \  }}t        j                  | j                  |j                        }|j                  d      }|s| j                  d|dd      }| j                  d	|d
| j                  d      }| j                  d|d| j                  d      }d| ||d}	| j                  rB| j                  | j                   d| |dddddi      }
|
r|
j                  d      }|r||	d<   | j                  t!        d|	      d      S )Nreference_idz{}-{}	course_idpartz/data-reference-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura reference idrG   )groupz-data-partner-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura widget id)defaultrW   z(data-ui-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura uiconf idr0   )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_urlrW   _PARTNER_ID
_UICONF_IDformatr!   rematch
_VALID_URLr   _search_regexr"   _download_jsonr=   r,   
url_resultr   )r.   r   mobjrT   video_id
partner_idui_idwebpager   r'   kaltura_sessionr]   s               r   _real_extractzSafariIE._real_extracts   s   $$S)zz.1#H))JOOE~~djj&=tzz&?QRH 99#xHMGT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-4E/*/SUZ \ 	r   N)
r8   r9   r:   IE_NAMEIE_DESCre   _TESTSr`   ra   ro   r?   r   r   rA   rA   G   s    G2GJ z1F#%"
 k
 w } @ x1F: KJ/r   rA   c                   .    e Zd ZdZdZddddddgZd Zy)	SafariApiIEz
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.htmlTrO   zZhttps://www.safaribooksonline.com/api/v1/book/9780134664057/chapter/RHCE_Introduction.htmlc           	      z   | j                  |      }| j                  |dj                  |j                  d      |j                  d            d      }|d   }d|v r=|j	                  dd      }|d   }|j                  d	d
      d    d	|d    d|d
   d d  }| j                  |t        j                               S )Nz{}/{}rU   rV   zDownloading part JSONweb_urlzlibrary/viewvideosnatural_key/r   r   -)	r_   rg   rb   rW   replacersplitrh   rA   ie_key)r.   r   ri   rV   rv   natural_keyss         r   ro   zSafariApiIE._real_extract   s    $$S)""

; 7F9KL#% y/W$oonh?G.L Q/231\!_4EQ|TUWZXZG[F\]Gw(9::r   N)r8   r9   r:   rp   re   rr   ro   r?   r   r   rt   rt      s7    G hJ a lF
;r   rt   c                   x     e Zd ZdZdZdZdddddd	d
dddddddddddddddgZe fd       Zd Z	 xZ
S )SafariCourseIEz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)rG   rI      z.Requires safaribooksonline account credentials)r   rN   playlist_countskipzQhttps://www.safaribooksonline.com/api/v1/book/9781449396459/?override_format=jsonTrO   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                 z    t         j                  |      st        j                  |      rdS t        |   |      S )NF)rA   suitablert   super)clsr   	__class__s     r   r   zSafariCourseIE.suitable   s7    !**3/;3G3G3L 	,W%c*	,r   c                 L   | j                  |      }| j                  | j                   d| d| j                   |d      }d|vrt	        d| d      |d   D cg c]&  }| j                  |t        j                               ( }}|d   }| j                  |||      S c c}w )	Nz/book/z/?override_format=zDownloading course JSONchapterszNo chapters found for course Tr   rI   )		_match_idrg   r=   r>   r   rh   rt   r~   playlist_result)r.   r   rU   course_jsonchapterentriescourse_titles          r   ro   zSafariCourseIE._real_extract   s    NN3'	))~~fYK/A$BRBRAST02 [( /	{;dL L
 'z24 OOG[%7%7%9:4 4 #7+##GYEE4s   +B!)r8   r9   r:   rp   rq   re   rr   classmethodr   ro   __classcell__)r   s   @r   r   r      s    G4GJ o!6
 @ c D d c e)F2 , ,Fr   r   )r   rc   urllib.parser#   commonr   utilsr   r   r	   rA   rt   r   r?   r   r   <module>r      sN     	  !81= 81v[| [|;, ;2AF\ AFr   