U
    Mf%                     @   sx   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 deZ	G dd	 d	e	Z
G d
d de	ZG dd de	ZdS )    N   )InfoExtractor   )ExtractorErrorupdate_url_queryc                   @   s(   e Zd ZdZdZdZdZdZdd ZdS )	SafariBaseIEz,https://learning.oreilly.com/accounts/login/safariz#https://learning.oreilly.com/api/v1jsonFc              
   C   s  |  dd d\}}dd }||r,d| _d S |j}tj|}tj|j}tjd|d d }	| j	d	d d
t
|||	d d|ddd\}
}|
d}|
ds|
ds|rtd| dddD ]}| || q|  |
dp|	d d\}}||rd| _d S tdd S )Nz2https://learning.oreilly.com/accounts/login-check/zDownloading login pagec                 S   s
   d| j kS )Nzlearning.oreilly.com/home/)url)urlh r   ;/tmp/pip-unpacked-wheel-zk9bgjdq/yt_dlp/extractor/safari.py	is_logged   s    z.SafariBaseIE._perform_login.<locals>.is_loggedTzhttps://api.oreilly.comnextr   z*https://www.oreilly.com/member/auth/login/z
Logging in)emailpasswordredirect_uriapplication/json)zContent-TypeZRefereri  )dataheadersZexpected_statuscredentialsZ	logged_inr   zUnable to login: expected)Zgroot_sessionidzorm-jwtzorm-rtzCompleting loginzUnable to log in)_download_webpage_handle	LOGGED_INr
   urllibparseurlparseparse_qsqueryurljoinZ_download_json_handler	   dumpsencodegetr   Z_apply_first_set_cookie_header)selfusernamer   _r   r   Zredirect_url
parsed_urlqsZnext_uriauthr   cookier   r   r   _perform_login   sb      
  


   
zSafariBaseIE._perform_loginN)	__name__
__module____qualname__Z
_LOGIN_URLZ_NETRC_MACHINE	_API_BASE_API_FORMATr   r+   r   r   r   r   r      s   r   c                	   @   sl   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d Z	dS )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.htmlZ dcc5a425e79f2564148652616af1f2a3Z
0_qbqx90icZmp4z/Introduction to Hadoop Fundamentals LiveLessonsijrUZ20150724Zstork)idexttitle	timestampZupload_dateZuploader_id)r
   md5	info_dictzYhttps://www.safaribooksonline.com/library/view/create-a-nodejs/100000006A0210/part00.htmlTr
   Z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.htmlZ1926081Z29375172c                 C   s  |  |}|d}|r*|}| j}| j}nd|d|d}| ||\}}t| j|j	}|d}|s| j
d|ddd}| j
d	|d
| jdd}| j
d|d| jdd}d| ||d}	| jr| j| j d| |dddddid}
|
r|
d}|r||	d< | td|	dS )Nreference_idz{}-{}	course_idpartz/data-reference-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura reference idr2   )groupz-data-partner-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura widget id)defaultr<   z(data-ui-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura uiconf idr&   )ZwidZ	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.phpZKaltura)_match_valid_urlr<   _PARTNER_ID
_UICONF_IDformatr   rematch
_VALID_URLr
   Z_search_regexr   _download_jsonr/   r#   
url_resultr   )r$   r
   mobjr9   Zvideo_idZ
partner_idZui_idZwebpager   r   Zkaltura_sessionr@   r   r   r   _real_extracts   sl    


        
 zSafariIE._real_extractN)
r,   r-   r.   IE_NAMEIE_DESCrG   _TESTSrB   rC   rK   r   r   r   r   r1   G   s@   
r1   c                   @   s0   e Zd ZdZdZddddddgZdd Zd	S )
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.htmlTr8   zZhttps://www.safaribooksonline.com/api/v1/book/9780134664057/chapter/RHCE_Introduction.htmlc              	   C   s   |  |}| |d|d|dd}|d }d|kr|dd}|d }|d	d
d  d	|d  d|d
 d d  }| |t S )Nz{}/{}r:   r;   zDownloading part JSONweb_urlzlibrary/viewZvideosZnatural_key/r   r   -)	rA   rH   rD   r<   replacersplitrI   r1   ie_key)r$   r
   rJ   r;   rP   Znatural_keysr   r   r   rK      s    
 0zSafariApiIE._real_extractN)r,   r-   r.   rL   rG   rN   rK   r   r   r   r   rO      s   rO   c                       sr   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dZdd Z	  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/Z9780133392838zHadoop Fundamentals LiveLessons)r2   r4      z.Requires safaribooksonline account credentials)r
   r7   Zplaylist_countskipzQhttps://www.safaribooksonline.com/api/v1/book/9781449396459/?override_format=jsonTr8   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                    s$   t |st|rdS t |S )NF)r1   suitablerO   super)clsr
   	__class__r   r   rZ      s    
zSafariCourseIE.suitablec                    sr     |}  j d| d j |d}d|krFtd| dd fdd	|d D }|d
 } |||S )Nz/book/z/?override_format=zDownloading course JSONZchapterszNo chapters found for course Tr   c                    s   g | ]}  |t qS r   )rI   rO   rV   ).0Zchapterr$   r   r   
<listcomp>   s   z0SafariCourseIE._real_extract.<locals>.<listcomp>r4   )Z	_match_idrH   r/   r0   r   Zplaylist_result)r$   r
   r:   Zcourse_jsonentriesZcourse_titler   r`   r   rK      s     
  
zSafariCourseIE._real_extract)r,   r-   r.   rL   rM   rG   rN   classmethodrZ   rK   __classcell__r   r   r]   r   rW      s:   	rW   )r	   rE   urllib.parser   commonr   utilsr   r   r   r1   rO   rW   r   r   r   r   <module>   s   ;^