U
    $Pf&                     @   s   d dl mZ d dlZd dlZddlmZ ddlmZ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 )    )unicode_literalsN   )InfoExtractor   )compat_parse_qscompat_urlparse)ExtractorErrorupdate_url_queryc                   @   s0   e Zd ZdZdZdZdZdZd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 S )N)_loginself r   ?/tmp/pip-unpacked-wheel-7zdooeg3/youtube_dl/extractor/safari.py_real_initialize   s    zSafariBaseIE._real_initializec              
   C   s*  |   \}}|d krd S | dd d\}}dd }||rDd| _d S | }t|}t|j}t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|   kS )Nzlearning.oreilly.com/home/)geturl)urlhr   r   r   	is_logged(   s    z&SafariBaseIE._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: %sexpected)Zgroot_sessionidzorm-jwtzorm-rtzCompleting loginzUnable to log in)Z_get_login_info_download_webpage_handle	LOGGED_INr   r   urlparser   queryurljoinZ_download_json_handler   dumpsencodegetr   Z_apply_first_set_cookie_header)r   usernamer   _r   r   Zredirect_url
parsed_urlqsZnext_uriauthr   cookier   r   r   r      sh     

 
  


   
zSafariBaseIE._loginN)
__name__
__module____qualname__Z
_LOGIN_URLZ_NETRC_MACHINE	_API_BASE_API_FORMATr!   r   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)urlmd5	info_dictzYhttps://www.safaribooksonline.com/library/view/create-a-nodejs/100000006A0210/part00.htmlTr8   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   t | j|}|d}|r.|}| j}| j}nd|d|df }| ||\}}t | 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
d| j|f |dddddid}
|
r|
d}|r||	d< | td|	dS )Nreference_idz%s-%s	course_idpartz/data-reference-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura reference idr4   )groupz-data-partner-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura widget id)defaultr?   z(data-ui-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura uiconf idz_%s)ZwidZ	uiconf_idzflashvars[referenceId]z*%s/player/kaltura_session/?reference_id=%sz 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)rematch
_VALID_URLr?   _PARTNER_ID
_UICONF_IDr    r   Z_search_regexr!   _download_jsonr1   r'   
url_resultr	   )r   r8   mobjr<   Zvideo_idZ
partner_idZui_idZwebpager   r#   Zkaltura_sessionrC   r   r   r   _real_extract   sl    

        
 zSafariIE._real_extractN)
r.   r/   r0   IE_NAMEIE_DESCrF   _TESTSrG   rH   rL   r   r   r   r   r3   U   s@   
r3   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.htmlTr;   zZhttps://www.safaribooksonline.com/api/v1/book/9780134664057/chapter/RHCE_Introduction.htmlc                 C   sD   t | j|}| |d|d|df d}| |d t S )Nz%s/%sr=   r>   zDownloading part JSONZweb_url)rD   rE   rF   rI   r?   rJ   r3   ie_key)r   r8   rK   r>   r   r   r   rL      s     zSafariApiIE._real_extractN)r.   r/   r0   rM   rF   rO   rL   r   r   r   r   rP      s   rP   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)r4   r6      z.Requires safaribooksonline account credentials)r8   r:   Zplaylist_countskipzQhttps://www.safaribooksonline.com/api/v1/book/9781449396459/?override_format=jsonTr;   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t| |S )NF)r3   suitablerP   superrR   )clsr8   	__class__r   r   rU      s    zSafariCourseIE.suitablec                    sj     |} d j| jf |d}d|kr>td| dd fdd|d D }|d	 } |||S )
Nz%s/book/%s/?override_format=%szDownloading course JSONZchapterszNo chapters found for course %sTr   c                    s   g | ]}  |t qS r   )rJ   rP   rQ   ).0Zchapterr   r   r   
<listcomp>  s   z0SafariCourseIE._real_extract.<locals>.<listcomp>r6   )Z	_match_idrI   r1   r2   r   Zplaylist_result)r   r8   r=   Zcourse_jsonentriesZcourse_titler   r   r   rL      s     
  
zSafariCourseIE._real_extract)r.   r/   r0   rM   rN   rF   rO   classmethodrU   rL   __classcell__r   r   rX   r   rR      s:   	rR   )
__future__r   r   rD   commonr   compatr   r   utilsr   r	   r
   r3   rP   rR   r   r   r   r   <module>   s   B^