
    yfJ                         d dl Z d dlZd dlZd dlZd dlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZmZmZmZ ddl	mZ d	Zd
 Z G d de      Z G d dee      Z G d de      Zy)    N   )OnceIE)AdobePassIE   )Request)determine_extExtractorErrorfloat_or_noneint_or_noneparse_qsunsmuggle_urlupdate_url_queryxpath_with_nsmimetype2extfind_xpath_attrtraverse_obj
update_urlurlhandle_detect_ext)HEADRequestz&http://www.w3.org/2005/SMIL21/Languagec                 &    t        | dt        i      S )Nsmil)r   
default_ns)ps    >/usr/lib/python3/dist-packages/yt_dlp/extractor/theplatform.py<lambda>r      s    }Q 45     c                   *    e Zd ZdZddZd Zd Zd Zy)ThePlatformBaseIEcomc           	      8   | j                  |||ddi| j                               }t        |t        d      d      }|t        |t        d      dd      }|x|j	                  d	      d
k(  r| j                  |j                  d          nE|j                  d   j                  d| j                  z        rt        |j                  d   d      | j                  |||t        dddd       \  }}g }	|D ]  }
t        j                  |
d         r$|	j                  | j                  |
d                ?|
d   }t!        |      dk(  r=| j#                  |      j	                  d      }|rt%        |d|j&                  i      |
d<   |	j)                  |
        |	|fS )NformatSMIL)notequeryheadersz.//smil:refsrcz.//smil:paramname	exceptionvalueGeoLocationBlockedabstractz4http://link.theplatform.%s/s/errorFiles/Unavailable.T)expectedUXWGVKRWHFSPz3.0.3)ghdcorec                     | d|z   fS )Nzmp4: )streamerr&   s     r   r   z=ThePlatformBaseIE._extract_theplatform_smil.<locals>.<lambda>9   s    h5M r   )	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   suitableextend_extract_once_formatsr   _get_cookiesr   r)   append)selfsmil_urlvideo_idr#   metaerror_elementr(   smil_formats	subtitlesformats_format	media_urlr8   s                r   _extract_theplatform_smilz+ThePlatformBaseIE._extract_theplatform_smil#   s   !!hT(F1C113 " 5 (b.?G$'r/2FKII$==)-AA--m.B.B:.NO"))%0;;N,,'( )%,,Z84I I #'"H"H(H
 ,w?M #I #Oi # 
	(Gwu~.t99'%.IJ#EN	 +v5!..y9==hGF)9)hPVP\P\E])^w'
	( 	!!r   c                 L    d| j                   d|d}| j                  ||      S )Nzhttp://link.theplatform.z/s/z?format=preview)rA   _download_json)rH   pathrJ   info_urls       r   _download_theplatform_metadataz0ThePlatformBaseIE._download_theplatform_metadataJ   s$    GK||UYZ""8X66r   c                    i }j                  d      }t        |t              rh|D ]c  }|j                  dd      |j                  d      |j                  d      }}}|j                  |g       j	                  t        |      |d       e j                  d      }j                  dg       }	g |	rgfd	}
|	d d
 D ])  } |
|j                  d      |j                  d             +  |
|	d
   j                  d      |	d
   j                  d      xs |       fd}d   |d   d   t        |d      t        j                  d      d      xs d j                  d      t        dt        hf      xs d t        dd dt        hf      xs d t        dd hf       |d       |d      t         |d             |d      xs  |d      dS )Ncaptionslangenr&   type)extr6   durationchaptersc                 h    t        | d      } t        |d      }| |y j                  | |d       y )N  )
start_timeend_time)r
   rG   )rb   rc   r_   s     r   _add_chapterzCThePlatformBaseIE._parse_theplatform_metadata.<locals>._add_chapter]   s@    *:t<
(48%)9", (! r   	startTimeendTimec                 (     t         fdd      S )Nc                 4    |xr | j                  d       S )N$)endswith)kvfields     r   r   zdThePlatformBaseIE._parse_theplatform_metadata.<locals>.extract_site_specific_field.<locals>.<lambda>m   s    13PawK9P r   F)get_all)r   )rn   infos   `r   extract_site_specific_fieldzRThePlatformBaseIE._parse_theplatform_metadata.<locals>.extract_site_specific_fieldk   s    &PZ_``r   titledescriptiondefaultThumbnailUrlra   pubDatebillingCodeauthor
categoriesc                 (    |j                  d      dv S )Nlabel)categoryN)r=   _rm   s     r   r   z?ThePlatformBaseIE._parse_theplatform_metadata.<locals>.<lambda>z   s    155>=O+O r   r'   keywordsc                 6    | rt        j                  d|       S d S )Nz[;,]\s?)resplit)xs    r   r   z?ThePlatformBaseIE._parse_theplatform_metadata.<locals>.<lambda>{   s    Z[rxx
TU?V ae r   regionshowseasonNumberprogrammingType)rr   rN   rs   	thumbnailr^   	timestampuploaderr_   creatorrx   tagslocationseriesseason_number
media_type)
r=   
isinstancelist
setdefaultrG   r   r
   r   r   str)rH   rp   rN   rY   captionrZ   r&   mimer^   tp_chaptersrd   chapterrq   r_   s    `           @r   _parse_theplatform_metadataz-ThePlatformBaseIE._parse_theplatform_metadataN   s   	88J'h%# ")++fd";W[[=OQXQ\Q\]cQd4c$$T2.55'-7  88J'hhz2. 's+ OW[[5w{{97MNOR,,[9;r?;N;Ny;Y;e]ef	a
 ']".34%h5$TXXi%8$?G4/ #D8cU*;<D&tOQWZ]Y^.` a idh 
5e4f'gh3H=1&9()D^)TU56GHoLghnLo!
 	
r   c                 H    | j                  ||      }| j                  |      S )N)rW   r   )rH   rU   rJ   rp   s       r   _extract_theplatform_metadataz/ThePlatformBaseIE._extract_theplatform_metadata   s%    224B//55r   N)zDownloading SMIL data)__name__
__module____qualname__rA   rR   rW   r   r   r1   r   r   r   r       s    G%"N72
h6r   r   c                        e Zd ZdZddgZdddddd	d
dddddidddddddddddddi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.d/	d0d1d2dd$gZe fd3       Zed6d4       Z	d5 Z
 xZS )7ThePlatformIEz(?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]   rr   rs   r^   r   upload_dater   skip_downloadTz404 Not Found)r6   	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]   rs   rr   r   r   r   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]   rs   rr   r   z	Dead link)r6   r   r   zGhttp://player.theplatform.com/p/NnzsPC/widget/select/media/4Y0TlYUr_ZT7r6   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]   rr   rs   r^   r   r   r   r   z.Error: Player PID "nbcNewsOffsite" is disabled)r6   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              #   j   K   t         |   ||      D ]  }t        j                  dd|        y w)Nz\s )super_extract_embed_urlsr   sub)clsr6   webpage	embed_url	__class__s       r   r   z!ThePlatformIE._extract_embed_urls   s7      4S'B 	/I&&I..	/s   03c                    |rdnd}dt        t        j                               |z   z  }d }d }t        j                  d|       j	                  d      }	 |||z    ||	      z         }
t        j                  |j                  d      |
t        j                        j                         }||z   |z    ||      z   }| d	|S )
N1000z%xc                 h    t        j                  | j                  d            j                  d      S Nascii)binasciib2a_hexencodedecode)r   s    r   
str_to_hexz+ThePlatformIE._sign_url.<locals>.str_to_hex   s'    ##CJJw$78??HHr   c                 J    t        j                  | j                  d            S r   )r   a2b_hexr   )hexs    r   hex_to_bytesz-ThePlatformIE._sign_url.<locals>.hex_to_bytes   s    ##CJJw$788r   z)https?://link\.theplatform\.com/s/([^?]+)r   r   z&sig=)inttimer   matchgrouphmacnewr   hashlibsha1	hexdigest)r6   sig_key
sig_secretlife
include_qsflagsexpiration_dater   r   relative_path
clear_textchecksumsigs                r   	_sign_urlzThePlatformIE._sign_url   s    "#diik"2T"9:	I	9 !MsSYYZ[\!%/"9J}<U"UV
88GNN73ZNXXZo%0:j3II!3''r   c           	         t        |i       \  }}| j                  d|j                  d      i       | j                  |      }|j	                  d      }|j	                  d      }|sd}|dz   }|j	                  d      r||j	                  d      z  }||z  }t        |      }d|v r| j                  ||      }t        j                  d	|      }	d }
t        |	      D ]>  }| j                  | j                  |d
      |d      }| j                  d|dd       }
|
> n |
t        d      | j                  d|d|
d|d   d         S |j                  dd      r|}nd|v rmi }|j                  d      }|r||d<   t        ||      }| j                  ||      }| j                  d|dd      }| j                  d|d      }|d|vrdnd z  }ng|j	                  d!      rQ|d"z   }|j                  d#d$      }|j                  d%d&      }| j!                  ||d'      }d(|v r|d(   }nd)|z  }|d*z   }nd)|z  }|j                  d+      }|r| j#                  ||d,   |d-         }| j%                  ||      \  }}t'        |d.       syt)        |d/d 0      }| j+                  t-        |      |d1d2d3      }|rJt/        |      d4k(  r<| j1                  ||d5d6      \  }}|j3                  |       | j5                  ||7       | j7                  ||      }| j5                  |j                  d8i       |      }|j9                  |||d9       |S ):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/z?byGuid=r   force_smil_urlFz/guid/
source_urlReferer)r%   zH<link[^>]+href=(["\'])(?P<url>.+?)\1[^>]+type=["\']application/smil\+xmlzsmil urlr6   )r   z1link\.theplatform\.com/s/((?:[^/?#&]+/)+[^/?#&]+)rU   ?z&formats=m3u,mpeg4configz
&form=jsonzswf/zconfig/zonsite/zonsite/config/zDownloading config
releaseUrlz)http://link.theplatform.com/s/%s?mbr=truez&formats=MPEG4&manifest=f4mr   keysecretc                 *    |d   j                  d      S )N	format_idhls)r@   r|   s     r   r   z-ThePlatformIE._real_extract.<locals>.<lambda>>  s    !K.2K2KE2R r   zmbr=true&manifest=m3u)r$   fragmentzChecking for HLS formatszNo HLS formats found)fatalr7   r   )m3u8_idr   )targetrN   )r   rO   rN   )r   _initialize_geo_bypassr=   _match_valid_urlr   r   _download_webpager   findallreversed_proto_relative_url_search_regexr	   
url_resultr   replacerT   r   rR   r   r   _request_webpager   r   #_extract_m3u8_formats_and_subtitlesrD   _merge_subtitlesr   update)rH   r6   smuggled_datamobjr   rJ   rU   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_extractzThePlatformIE._real_extract   s   *33]##**?;%
 	 $$S)jj/::d#"KS ::gDJJw''D3-W,,S(;Gjj!=wGGG #7+ "44,,VW=79 ,,4k%t - 5 & $%=>>??Wgfoa&8$: ; ; -u5H_G&**<8J%/	"c73G,,Wh?G))[5 * 2H %%DhPVXDs(28QQHZZ!|+J#++FI>J#++I7GHJ((X?STFv%$\2IDP"%BBHBTIH&~~hE
CMJH!;;HhO G%RS!#-DtTH((H%x1KMckp ) rD,T2f<'+'O'OhU (P (D$	9y)%%i	%B00x@!22377;3KYW

+
 	 
r   )iX  F)r   r   r   
_VALID_URL_EMBED_REGEX_TESTSclassmethodr   staticmethodr   r  __classcell__)r   s   @r   r   r      s8   +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                   X    e Zd ZdZdZddddddd	d
ddddgdd
ddddgZdi dfdZd Zy)ThePlatformFeedIEz-%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]   rr   rs   r   r   r   r^   rx   r   )r6   r   r   zQhttp://feed.theplatform.com/f/2E2eJC/nnd_NBCNews?byGuid=nn_netcast_180306.Copy.01Tr   Nc           
         | j                   | j                         |||fz  }| j                  ||      d   d   }	|rd|||	d   fz  n|	j                  d      }
g }i }d }d }g }|	d   D ]  }|d   }t        j                  |      }||}t        |j                  d            }|j                  d	      xs t        |      d
   }|D ]  }||v r|j                  |       d|d   |d}||v r|j                  ||          | j                  t        |
xs ||      |d|z        \  }}|j                  |       | j                  ||      }  |	j                  dg       D cg c];  }|d   t        |j                  d            t        |j                  d            d= }}t        |	j                  d      d      }|	j                  dg       D cg c]  }|d   	 }}| j                  |d||      }| j                  ||d         }|j                  |||||||d       |r|j                   ||	             |S c c}w c c}w )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 %szmedia$thumbnailszplfile$widthzplfile$height)r6   widthheightzmedia$availableDatera   )scalezmedia$categoriesz
media$namer   rN   )r   rO   rN   
thumbnailsr^   r   rx   )_URL_TEMPLATEhttp_schemerT   r=   r   	_match_idr
   r   rG   r  rR   r   rD   r  r   r   )rH   r   r  filter_queryrJ   custom_fieldsasset_types_query
account_idreal_urlentrymain_smil_urlrO   rN   first_video_idr^   asset_typesitemrI   cur_video_idfile_asset_types
asset_typer$   cur_formatscur_subtitlesr   r,  r   rx   r  s                                r   _extract_feed_infoz$ThePlatformFeedIE._extract_feed_infok  s   %%)9)9);['S_(``##Hh7	B1E {EK{\fhmnthuNvv  KP  KT  KT  Uh  Ki	/* 	LDL)H(228<L%!-(2C)DE#xx(;<`@RS_@`. L
,"":.!#O4",
 !22LL!2:!>?-1-K-KL\!-XuM67?A_blAl.n*]{+ 11)]K	L	L6 !99%7<	>  \* ~!>?!)--"@A
 >
 >  		*? @M	5:YY?QSU5VWTd<(W
W00K1XZbc)))S5EF	

"$ "$
 	 JJ}U+,
/> Xs   !A IIc                     | j                  |      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }| j                  ||||      S )Nr   r   r  filter)r   r   r?  )rH   r6   r	  rJ   r   r  r0  s          r   r  zThePlatformFeedIE._real_extract  sa    $$S)::d#jj/**Y'zz(+&&{G\8TTr   )r   r   r   r-  r  r  r?  r  r1   r   r   r   r   S  sx    CM TJ I1,>1%#35[\#
	" c!F* ^buw  EI 8tUr   r   )r   r   r   r   r   oncer   	adobepassr   
networkingr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r<   r   r   r   r1   r   r   <module>rF     st    	      "      %5
5d6 d6NI%{ IXZU) ZUr   