
    yfO&                         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e      Z
 G d	 d
e
      Z G d de
      Z G d de
      Zy)    N   )InfoExtractor   )compat_parse_qscompat_urlparse)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                  |      }t        |j                        }t        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|z  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    9/usr/lib/python3/dist-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: %sexpected)groot_sessionidzorm-jwtzorm-rtzCompleting loginzUnable to log in)_download_webpage_handle	LOGGED_INr   r   urlparser   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$--l;
Z--."**%r&z!}6 //8$!$ (  vx 2'"  # 0 	$
d hh}-%dhh~.F %3dD D
 ? 	>F//f=	> //HH^$0$8JM4 T?!DN/00r   N)	__name__
__module____qualname__
_LOGIN_URL_NETRC_MACHINE	_API_BASE_API_FORMATr$   r6    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                  }n|j                  d      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|z  ||d}	| j                  rB| j                  | j                  d||dddddi      }
|
r|
j                  d      }|r||	d<   | j                  t        d|	      d      S )Nreference_id	course_id-partz/data-reference-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura reference idrF   )groupz-data-partner-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura widget id)defaultrW   z(data-ui-id=(["\'])(?P<id>(?:(?!\1).)+)\1zkaltura uiconf idz_%s)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_IDr#   rematch
_VALID_URLr   _search_regexr$   _download_jsonr<   r+   
url_resultr	   )r-   r   mobjrS   video_id
partner_idui_idwebpager   r&   kaltura_sessionr]   s               r   _real_extractzSafariIE._real_extractw   s   $$S)zz.1#H))JOOE"&**["94::f;MNH 99#xHMGT88DOOTXX6D::n5L#11F34  2  A ++@,d6F6F , J &&;,doo ' E :%&2
 >>"11@DP\]<9!#56	 2 8O
 )--i8-4E/*/SUZ \ 	r   N)
r7   r8   r9   IE_NAMEIE_DESCrd   _TESTSr`   ra   rn   r>   r   r   r@   r@   K   s    G2GJ z1F#%"
 k
 w } @ x1F: KJ/r   r@   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.htmlTrN   zZhttps://www.safaribooksonline.com/api/v1/book/9780134664057/chapter/RHCE_Introduction.htmlc                 d   | j                  |      }| j                  ||j                  d      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 )NrT   /rV   zDownloading part JSONweb_urlzlibrary/viewvideosnatural_keyr   r   rU   )r_   rf   rW   replacersplitrg   r@   ie_key)r-   r   rh   rV   rv   natural_keyss         r   rn   zSafariApiIE._real_extract   s    $$S)""DJJ{3TZZ5GH#% y/W$oonh?G.L Q/231\!_4EQ|TUWZXZG[F\]Gw(9::r   N)r7   r8   r9   ro   rd   rq   rn   r>   r   r   rs   rs      s7    G hJ a lF
;r   rs   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)rF   rH      z.Requires safaribooksonline account credentials)r   rM   playlist_countskipzQhttps://www.safaribooksonline.com/api/v1/book/9781449396459/?override_format=jsonTrN   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                     t         j                  |      st        j                  |      rdS t        t        |   |      S )NF)r@   suitablers   superr   )clsr   	__class__s     r   r   zSafariCourseIE.suitable   s9    !**3/;3G3G3L 	?>38=	?r   c                 L   | j                  |      }| j                  | j                  d|d| j                  |d      }d|vrt	        d|z  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 %sTr    rH   )		_match_idrf   r<   r=   r   rg   rs   r|   playlist_result)r-   r   rT   course_jsonchapterentriescourse_titles          r   rn   zSafariCourseIE._real_extract   s    NN3'	))04	4K[K[\02 [( 1I=N N
 'z24 OOG[%7%7%9:4 4 #7+##GYEE4s   +B!)r7   r8   r9   ro   rp   rd   rq   classmethodr   rn   __classcell__)r   s   @r   r   r      s    G4GJ o!6
 @ c D d c e)F2 ? ?Fr   r   )r   rb   commonr   compatr   r   utilsr   r	   r   r@   rs   r   r>   r   r   <module>r      sP     	 !81= 81v[| [|;, ;2AF\ AFr   