
    V|hG                         S SK r 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K	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJr  SrS r " S	 S
\5      r " S S\5      r " S S\5      rg)    N   )AdobePassIE   )HEADRequestRequest)ExtractorErrordetermine_extfind_xpath_attrfloat_or_noneint_or_nonemimetype2extparse_age_limitparse_qstraverse_objunsmuggle_url
update_urlupdate_url_queryurl_or_noneurlhandle_detect_extxpath_with_nsz&http://www.w3.org/2005/SMIL21/Languagec                 &    [        U S[        05      $ )Nsmil)r   
default_ns)ps    V/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/theplatform.py<lambda>r      s    }Q 45    c                   B    \ rS rSrSrS	S jrS
S jr\S 5       rS r	Sr
g)ThePlatformBaseIE   comc           	         U R                  XUSS0U R                  5       S9n[        U[        S5      S5      nUb  [        U[        S5      SS5      nUb|  UR	                  S	5      S
:X  a  U R                  UR                  S   5        OHUR                  S   R                  SU R                   S35      (       a  [        UR                  S   SS9eU R                  XAU[        SSS.S S9u  px/ n	U Hj  n
U
S   n[        U5      S:X  aB  U R                  U5      R	                  S5      nU(       a  [        USUR                  05      U
S'   U	R!                  U
5        Ml     X4$ )NformatSMIL)notequeryheadersz.//smil:refsrcz.//smil:paramname	exceptionvalueGeoLocationBlockedabstractzhttp://link.theplatform.z/s/errorFiles/Unavailable.T)expectedUXWGVKRWHFSPz3.0.3)ghdcorec                     U SU-   4$ )Nzmp4: )streamerr(   s     r   r   =ThePlatformBaseIE._extract_theplatform_smil.<locals>.<lambda>6   s    h5Mr   )	namespace
f4m_paramstransform_rtmp_urlurlm3u8hdnea2hdnea3)_download_xmlgeo_verification_headersr
   _xgetraise_geo_restrictedattrib
startswith_TP_TLDr   !_parse_smil_formats_and_subtitlesr   r	   _get_cookiesr   r+   append)selfsmil_urlvideo_idr%   metaerror_elementr*   smil_formats	subtitlesformats_format	media_urlr;   s                r   _extract_theplatform_smil+ThePlatformBaseIE._extract_theplatform_smil!   s   !!T(F1C113 " 5 (b.?G$'r/2FKII$==)-AA--m.B.B:.NO"))%0;;24<<.@Z[] ](%,,Z84I I #'"H"HH
 ,w?M #I #O #GIY'61**9599(C%5i(FLLAY%ZGENNN7# $ !!r   c                 \    U R                  SU R                   SU 3UUSS0S9=(       d    0 $ )Nzhttps://link.theplatform.z/s/r#   preview)fatalr&   )_download_jsonrD   )rH   pathrJ   rV   s       r   _download_theplatform_metadata0ThePlatformBaseIE._download_theplatform_metadataD   sB    ""'~S?)4 # 6 <9;	<r   c                    S n[        U 0 SS[        14_SS[        14_SS[        14_SS[        14_SS[        SS	914_S
S[        SS	914_SS[        14_SS[        1[        [
        [        4_SSS S[        1[        [
        [        4_SS[        1[        S 1[        4_SSSS[        1[        4_SU" S5      [        1[        4_SU" SS5      [        1[        4_SU" S S!S"5      S#[        1[        4_S$U" S%5      [        1[        4_S&U" S'S(5      [        1[        4_5      n[        U S)SS*[        SS	914S+[        SS	914S,.45      n[        U5      S-:  d  [        US.5      (       a  X2S)'   0 US/'   [        U S0S1 45       H]  nUS/   R                  UR                  S25      =(       d    S3/ 5      R                  US4   [        UR                  S(5      5      S5.5        M_     U$ )6Nc                     ^  U 4S j$ )Nc                 X   > U=(       a!    U R                  [        S T 5       5      5      $ )Nc              3   ,   #    U  H
  nS U 3v   M     g7f)$Nr3   ).0fs     r   	<genexpr>pThePlatformBaseIE._parse_theplatform_metadata.<locals>.site_specific_filter.<locals>.<lambda>.<locals>.<genexpr>L   s     6O11#ws   )endswithtuple)kvfieldss     r   r   ]ThePlatformBaseIE._parse_theplatform_metadata.<locals>.site_specific_filter.<locals>.<lambda>L   s!     Pajj6O6O1O&P Pr   r3   )rh   s   `r   site_specific_filterKThePlatformBaseIE._parse_theplatform_metadata.<locals>.site_specific_filterK   s	    PPr   titleepisodedescription	thumbnaildefaultThumbnailUrlduration  scale	timestamppubDateuploaderbillingCodecreatorsauthor
categoriesc                 *    UR                  S5      S;   $ )Nlabel)categoryN)r@   _rg   s     r   r   ?ThePlatformBaseIE._parse_theplatform_metadata.<locals>.<lambda>X   s    155>=O+Or   r)   tagskeywordsc                 0    [         R                  " SU 5      $ )Nz[;,]\s?)resplit)xs    r   r   r   Z   s    288JPQ;Rr   	age_limitratings.ratingseason_numberseasonNumberepisode_numberepisodeNumberairOrderseriesshowseriesTitleseriesShortTitle)N.locationregion
media_typeprogrammingTypetypechapters	startTimeendTime)
start_timeend_timer   )r   r   rN   captionsc                     [        US   5      $ )Nr(   )r   r   s     r   r   r   l   s    ;WXY^W_K`r   langenr(   )r9   ext)r   strr   r   filterallr   anyr   len
setdefaultr@   rG   r   )tp_metadatarj   infor   captions        r   _parse_theplatform_metadata-ThePlatformBaseIE._parse_theplatform_metadataI   s   	Q K *
gu%*
#'*
 MC51*
 /+?	*

 m$&?%@A*
 )m$&?%@A*
 .*
 C5&#v>*
 OvsF4*
 Z#1R0SU[\*
 )S(_4EsK*
 2>B[MSVW*
 3OZPS^R_ade*
  +FMCUVXcfiejlop!*
" -h7#D#*
$ /0A6JSESVW%*
 *  j#&T)B(CD"]%>$?@@
 . 
 x=1X G G'[#K*>`1abG((V)<)DbIPPu~#GKK$78R  c r   c                 F    U R                  X5      nU R                  U5      $ )N)rY   r   )rH   rX   rJ   r   s       r   _extract_theplatform_metadata/ThePlatformBaseIE._extract_theplatform_metadatat   s#    224B//55r   r3   N)zDownloading SMIL data)T)__name__
__module____qualname____firstlineno__rD   rR   rY   staticmethodr   r   __static_attributes__r3   r   r   r   r      s,    G!"F<
 ( (T6r   r   c                      ^  \ rS rSrSrSS/rSSSSS	S
SSSS.SS0SS.SSSSSSSSS.SS0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/S0.	S1S2.S3SS%./r\U 4S4 j5       r\	S8S5 j5       r
S6 rS7rU =r$ )9ThePlatformIEy   z(?x)
        (?:https?://(?:link|player)\.theplatform\.com/[sp]/(?P<provider_id>[^/]+)/
           (?:(?:(?:[^/]+/)+select/)?(?P<media>media/(?:guid/\d+/)?)?|(?P<config>(?:[^/\?]+/(?:swf|config)|onsite)/select/))?
         |theplatform:)(?P<id>[^/\?&]+)z(?x)
            <meta\s+
                property=(["'])(?:og:video(?::(?:secure_)?url)?|twitter:player)\1\s+
                content=(["'])(?P<url>https?://player\.theplatform\.com/p/.+?)\2z](?s)<(?:iframe|script)[^>]+src=(["\'])(?P<url>(?:https?:)?//player\.theplatform\.com/p/.+?)\1z^http://link.theplatform.com/s/dJ5BDC/e9I_cZgTgIPd/meta.smil?format=smil&Tracking=true&mbr=truee9I_cZgTgIPdflvzBlackberry's big, bold Z30zEThe Z30 is Blackberry's biggest, baddest mobile messaging device yet.   irR20131031zCBSI-NEW)idr   rl   rn   rq   ru   upload_daterw   skip_downloadTz404 Not Found)r9   	info_dictparamsskipz1http://link.theplatform.com/s/kYEXFC/22d_qsQ6MIRT22d_qsQ6MIRTz$md5:ac330c9258c04f9d7512cf26b9595409z>Tesla Model S: A second step towards a cleaner motoring futureiU20150312)r   r   rn   rl   ru   r   rw   zCNet no longer uses ThePlatformzUhttps://player.theplatform.com/p/D6x-PC/pulse_preview/embed/select/media/yMBg9E8KFxZDyMBg9E8KFxZDmp4z$md5:644ad9188d655b742f942bf2e06b002dz-HIGHLIGHTS: USA bag first ever series Cup winEGSM)r   r   rn   rl   rw   z	Dead link)r9   r   r   zGhttp://player.theplatform.com/p/NnzsPC/widget/select/media/4Y0TlYUr_ZT7r9   only_matchingzMhttp://player.theplatform.com/p/2E2eJC/nbcNewsOffsite?guid=tdy_or_siri_150701 fb96bb3d85118930a5b055783a3bd992tdy_or_siri_150701uD   iPhone Siri’s sassy response to a math question has people talkingz$md5:a565d1deadd5086f3331d57298ec6333g     T@re:^https?://.*\.jpg$iؓU20150701	NBCU-NEWS)	r   r   rl   rn   rq   ro   ru   r   rw   z.Error: Player PID "nbcNewsOffsite" is disabled)r9   md5r   r   zhttp://player.theplatform.com/p/NnzsPC/onsite_universal/select/media/guid/2410887629/2928790?fwsitesection=nbc_the_blacklist_video_library&autoPlay=true&carouselID=137781c              #   n   >#    [         TU ]  X5       H  n[        R                  " SSU5      v   M     g 7f)Nz\s )super_extract_embed_urlsr   sub)clsr9   webpage	embed_url	__class__s       r   r   !ThePlatformIE._extract_embed_urls   s0      4SBI&&I.. Cs   25c                    U(       a  SOSnS[        [        R                  " 5       5      U-   -  nS n[        R                  " SU 5      R	                  S5      n[
        R                  XV-   U" U5      -   5      n	[        R                  " UR                  S5      U	[        R                  5      R                  5       n
XV-   U
-   U" U5      -   nU  SU 3$ )	N1000z%xc                 @    U R                  S5      R                  5       $ )Nascii)encodehex)str_datas    r   
str_to_hex+ThePlatformIE._sign_url.<locals>.str_to_hex   s    ??7+//11r   z)https?://link\.theplatform\.com/s/([^?]+)r   r   z&sig=)inttimer   matchgroupbytesfromhexhmacnewr   hashlibsha1	hexdigest)r9   sig_key
sig_secretlife
include_qsflagsexpiration_dater   relative_path
clear_textchecksumsigs               r   	_sign_urlThePlatformIE._sign_url   s    "#diik"2T"9:	2 !MsSYYZ[\]]5#:Z=V#VW
88GNN73ZNXXZ%0:j3IIeC5!!r   c                    [        U0 5      u  pU R                  SUR                  S5      05        U R                  U5      nUR	                  S5      nUR	                  S5      nU(       d  SnUS-   nUR	                  S5      (       a  XcR	                  S5      -  nXe-  n[        U5      nSU;   a  U R                  X5      n[        R                  " S	U5      n	S n
[        U	5       H=  nU R                  U R                  US
5      US5      nU R                  SUSS S9n
U
c  M=    O   U
c  [        S5      eU R                  SR                  XJUS   S   5      5      $ UR                  SS5      (       a  UnOSU;   al  0 nUR                  S5      nU(       a  XS'   [        XS9nU R                  UU5      nU R                  SUSSS9nU R                  SUS5      nUSU;  a  SOS-  nO|UR	                  S 5      (       a`  US!-   nUR!                  S"S#5      nUR!                  S$S%5      nU R#                  UUS&5      nUR                  S'5      =(       d    S(U S)3nUS*-   nOS(U S)3nUR                  S+5      nU(       a  U R%                  UUS,   US-   5      nU R'                  X5      u  nn[)        US. 5      (       ds  [+        US/S S09nU R-                  [/        U5      US1S2SS39nU(       aE  [1        U5      S4:X  a6  U R3                  UUS5SS69u  nnUR5                  U5        U R7                  UUS79  U R9                  Xe5      nU R7                  UR                  S80 5      U5      nUR;                  UUUS9.5        U$ ):N	countriesgeo_countriesprovider_idr   dJ5BDC/mediaguidz<script[^>]+src="([^"]+)"zhttp:zDownloading feed scriptzdefaultFeedId\s*:\s*"([^"]+)"zdefault feed id)defaultzUnable to find feed idz-http://feed.theplatform.com/f/{}/{}?byGuid={}r   force_smil_urlFz/guid/
source_urlReferer)r'   zH<link[^>]+href=(["\'])(?P<url>.+?)\1[^>]+type=["\']application/smil\+xmlzsmil urlr9   )r   z1link\.theplatform\.com/s/((?:[^/?#&]+/)+[^/?#&]+)rX   ?z&formats=m3u,mpeg4configz
&form=jsonzswf/zconfig/zonsite/zonsite/config/zDownloading config
releaseUrlzhttp://link.theplatform.com/s/z	?mbr=truez&formats=MPEG4&manifest=f4mr   keysecretc                 *    US   R                  S5      $ )N	format_idhls)rC   r   s     r   r   -ThePlatformIE._real_extract.<locals>.<lambda>*  s    !K.2K2KE2Rr   zmbr=true&manifest=m3u)r&   fragmentzChecking for HLS formatszNo HLS formats found)rV   r:   r  )m3u8_idrV   )targetrN   )r   rO   rN   )r   _initialize_geo_bypassr@   _match_valid_urlr   r   _download_webpager   findallreversed_proto_relative_url_search_regexr   
url_resultr#   r   replacerW   r   rR   r   r   _request_webpager   r   #_extract_m3u8_formats_and_subtitlesextend_merge_subtitlesr   update)rH   r9   smuggled_datamobjr   rJ   rX   qs_dictr   scriptsfeed_idscriptfeed_scriptrI   r'   r  request
config_urlr	  release_urlr   rO   rN   m3u8_urlurlh	m3u8_fmts	m3u8_subsretcombined_subtitless                                r   _real_extractThePlatformIE._real_extract   s   *33##**?;%
 	 $$S)jj/::d#"KS ::gJJw''D3-W,,S;Gjj!=wGGG #7+"44,,VW=79 ,,4k%t - 5 & , $%=>>??#R#Y#Ygfoa&8$: ; ; -u55H_G&**<8J%/	"c3G,,Wh?G))[5 * 2H %%DhPVXDs(28QQHZZ!!|+J#++FI>J#++I7GHJ((X?STF **\2f8VW[V\\e6fK"%BBH7vYGH&~~hE
CMJH!;;HO G%RSS!#-DtTH((H%x1KMckp ) rD,T2f<'+'O'OhU (P (D$	9y)%%i	%B00@!22377;3KYW

+
 	 
r   r3   )iX  F)r   r   r   r   
_VALID_URL_EMBED_REGEX_TESTSclassmethodr   r   r   r2  r   __classcell__)r   s   @r   r   r   y   s>   +J
	T 	iL p 2c#%"	
 T
  #( C AU#%"
 T
 2!$ g AD
 
 Y _1&[A1#%#

 A$ |	DFL / / " "[ [r   r   c                   b    \ 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./rS0 S4S jrS rSr	g)ThePlatformFeedIEi?  z-%s//feed.theplatform.com/f/%s/%s?form=json&%szhttps?://feed\.theplatform\.com/f/(?P<provider_id>[^/]+)/(?P<feed_id>[^?/]+)\?(?:[^&]+&)*(?P<filter>by(?:Gui|I)d=(?P<id>[^&]+))zwhttp://feed.theplatform.com/f/7wvmTC/msnbc_video-p-test?form=json&pretty=true&range=-40&byGuid=n_hardball_5biden_140207 6e32495b5073ab414471b615c5ded394n_hardball_5biden_140207r   z'The Biden factor: will Joe run in 2016?zbCould Vice President Joe Biden be preparing a 2016 campaign? Mark Halperin and Sam Stein weigh in.r   20140208iRg     0}@zMSNBC/Issues/Democratsz$MSNBC/Issues/Elections/Election 2016r   )
r   r   rl   rn   ro   r   ru   rq   r{   rw   )r9   r   r   zQhttp://feed.theplatform.com/f/2E2eJC/nnd_NBCNews?byGuid=nn_netcast_180306.Copy.01Tr   Nc           
         U R                   U R                  5       XU4-  nU R                  X5      S   S   n	U(       a
  SXU	S   4-  OU	R                  S5      n
/ n0 nS nS n/ nU	S    H  nUS   n[        R                  U5      nUc  Un[        UR                  S5      5      nUR                  S	5      =(       d    [        U5      S
   nU H  nUU;   a  M  UR                  U5        SUS   US.nUU;   a  UR                  UU   5        U R                  [        U
=(       d    UU5      USU 35      u  nnUR                  U5        U R                  UU5      nM     M     U	R                  S/ 5       Vs/ s H<  nUS   [        UR                  S5      5      [        UR                  S5      5      S.PM>     nn[        U	R                  S5      SS9nU	R                  S/ 5       Vs/ s H  nUS   PM
     nnU R                  U SU 3U5      nU R                  UUS   5      nUR                  UUUUUUUS.5        U(       a  UR                  U" U	5      5        U$ s  snf s  snf )Nentriesr   z1http://link.theplatform.com/s/%s/media/guid/%d/%sr  zplmedia$publicUrlzmedia$contentz
plfile$urlzplfile$durationzplfile$assetTypes
assetTypestruezplfile$format)mbrrO   r@  zDownloading SMIL data for zmedia$thumbnailszplfile$widthzplfile$height)r9   widthheightzmedia$availableDaterr   rs   zmedia$categoriesz
media$namer  rN   )r   rO   rN   
thumbnailsrq   ru   r{   )_URL_TEMPLATEhttp_schemerW   r@   r   	_match_idr   r   rG   r!  rR   r   r  r   r   r   )rH   r   r&  filter_queryrJ   custom_fieldsasset_types_query
account_idreal_urlentrymain_smil_urlrO   rN   first_video_idrq   asset_typesitemrI   cur_video_idfile_asset_types
asset_typer&   cur_formatscur_subtitlesro   rE  ru   r{   r0  s                                r   _extract_feed_info$ThePlatformFeedIE._extract_feed_infoW  s   %%)9)9);[S_(``##H7	B1E {EK{hmnthuNvv  KP  KT  KT  Uh  Ki	/*DL)H(228<L%!-(2C)DE#xx(;<`@RS_@`.
,"":.!#O4",
 !22LL!2:!>?-1-K-KL\!-XuM67?C]^h]iAj.l*]{+ 11)]K	 / +6 !99%7<	> =i \* ~!>?!)--"@A
 =	 	 >  		*? @M	5:YY?QSU5VW5VTd<(5V
W00K=.AQ1RT\])))S5EF	

"$ "$
 	 JJ}U+,
/> Xs   7AI)I$c                     U R                  U5      nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nU R                  XEXc5      $ )Nr   r   r&  r   )r  r   rX  )rH   r9   r#  rJ   r   r&  rI  s          r   r2  ThePlatformFeedIE._real_extract  s]    $$S)::d#jj/**Y'zz(+&&{\TTr   r3   )
r   r   r   r   rF  r4  r6  rX  r2  r   r3   r   r   r:  r:  ?  sx    CM TJ I1,>1%#35[\#
	" c!F* ^buw  EI 8tUr   r:  )r   r   r   r   	adobepassr   
networkingr   r   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r?   r   r   r:  r3   r   r   <module>r_     sl      	  " -    $ 6
5X6 X6vC% CLZU) ZUr   