
    V|hQ                         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J	r	J
r
JrJrJr   " S S\5      r " S S	\5      rg)
    N   )InfoExtractor   )ExtractorErrorint_or_noneparse_durationsrt_subtitles_timecodetraverse_objtry_geturlencode_postdatac                      \ 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S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S0S1S2S(.	SS.S3SS4.S5SS4.S6SS4.S7SS4./r\S8 5       r\S9 5       r	S: r
S;0 4S< jrS= rS> rS? rS@ rSArg;)BNexxIE   aa  (?x)
                        (?:
                            https?://api\.nexx(?:\.cloud|cdn\.com)/v3(?:\.\d)?/(?P<domain_id>\d+)/videos/byid/|
                            nexx:(?:(?P<domain_id_s>\d+):)?|
                            https?://arc\.nexx\.cloud/api/video/
                        )
                        (?P<id>\d+)
                    z0https://api.nexx.cloud/v3/748/videos/byid/128907 31899fd683de49ad46f4ee67e53e83fe128907mp4zStiftung Warentestu   Wie ein Test abläuftz$md5:d1ddb1ef63de721132abd38639cc2fd2
SPIEGEL TVre:^https?://.*\.jpg$i	  i2R20131112
idexttitle	alt_titledescriptioncreator	thumbnailduration	timestampupload_datez"Spiegel nexx CDNs are now disabled)urlmd5	info_dictskipz3https://api.nexx.cloud/v3.1/741/videos/byid/17018341701834u%   Mein Leben mit 'nem TikTok E-Boy 😤z$md5:f84f395a881fd143f952c892deab528di  i_20200724r   z	Episode 2zSeason 2)r   r   r   r   r   r   r   r   r    episode_numberseason_numberepisodeseasonskip_downloadT)r!   r#   paramsznexx:741:1269984 d5f14e14b592501e51addd5abef95a7f1269984u"   1 TAG ohne KLO... wortwörtlich! ?z$md5:2016393a31991a900946432ccdd09a6fi_  i9Z20180214)	r   r   r   r   r   r   r   r   r    )r!   r"   r#   znexx:747:1533779 6bf6883912b82b7069fb86c2297e98931533779z$Aufregung um ausgebrochene Raubtierez	Eifel-Zooz$md5:f21375c91c74ad741dcb164c427999d2o   i[20180601z1https://api.nexxcdn.com/v3/748/videos/byid/128907r!   only_matchingznexx:748:128907znexx:128907z,https://arc.nexx.cloud/api/video/128907.jsonc                 d    [         R                  " SU 5      nU(       a  UR                  S5      $ S $ )Nze<script\b[^>]+\bsrc=["\'](?:https?:)?//(?:require|arc)\.nexx(?:\.cloud|cdn\.com)/(?:sdk/)?(?P<id>\d+)r   )researchgroup)webpagemobjs     O/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/nexx.py_extract_domain_idNexxIE._extract_domain_idm   s.    yyt $(tzz$1T1    c                     / n[         R                  U5      nU(       a5  [        R                  " SU5       H  nUR	                  SU SU 35        M     U$ )NzT(?is)onPLAYReady.+?_play\.(?:init|(?:control\.)?addPlayer)\s*\(.+?\s*,\s*["\']?(\d+)https://api.nexx.cloud/v3/z/videos/byid/)r   r=   r7   findallappend)clsr!   r:   entries	domain_idvideo_ids         r<   _extract_embed_urlsNexxIE._extract_embed_urlst   s]    
  --g6	JJk 0=
SU r?   c                 >   [        US[        S9(       a1  U R                  SR                  U R                  US   S   5      5        [        [        US 5      =(       d    S5      nSUs=::  a  S:  a   g   [        SR                  U R                  US   S	   5      S
S9e)N)metadatanoticeexpected_typez{} said: {}rK   rL   c                     U S   S   $ )NrK   status xs    r<   <lambda>&NexxIE._handle_error.<locals>.<lambda>   s    *h 7r?      i,  	errorhintT)expected)r
   strreport_warningformatIE_NAMEr   r   r   )selfresponserP   s      r<   _handle_errorNexxIE._handle_error   s    "8L 4 4T\\8JCWX`Ca bcW79 @<?A&3   x
/CK/PQ 	r?   Nc                     SUS'   U R                  SU SU 3USU S3[        U5      US9nU R                  U5        US   $ )	Nz0application/x-www-form-urlencoded; charset=UTF-8zContent-TyperA   /zDownloading z JSONdataheadersresult)_download_jsonr   r_   )r]   rF   pathrG   rd   re   rf   s          r<   	_call_apiNexxIE._call_api   se    "T$$(1TF;X4&&-?-E %  	6"hr?   c                   ^ US   mTS   nUS:X  d   eUS   S   n[        TS   5      nTS   S:X  a%  S	[        U5      -  S S S
2   nUSUSS  SUSS  3-  nUSU SU S3-  nSU-   nTS   R                  S5      nTS   n	U4S jn
/ nU	S:X  aE  US-  nU H3  nUR                  S5      nX}S   U
" [        US   5      5      -   S-   -  nM5     US-  nGO&U	S:X  Ga  UR                  S5      nUR                  5       nSR	                  U5      =nnUTS   -  nUS-  nU H  nUR                  S5      n[        US   5      nU US    U
" U5       S3nUS-   U-   U SU 3US.nUS   R                  S5      n[        U5      S:X  a,  UR                  [        US   5      [        US   5      S.5        UR                  U5        USUS -   3-   nUUS-   -  nM     US S
 S!-   WR                  S5      S   -   nO eU	S:X  a,  UR                  U R                  UTS#   S$4-  UU S%3S"S&95        UR                  U R                  UTS'   S(4-  US)S*U S+3S"S,95        U$ )-N
streamdatacdnTypefreegeneralhashoriginalDomainapplyFolderHierarchyr   z%04drb   r   r      _z	http://%sazureFileDistribution,cdnProviderc                 $   > TS   S:X  a  SU  3$ S$ )NapplyAzureStructurer   ru    rQ   )pstream_datas    r<   p0(NexxIE._extract_free_formats.<locals>.p0   s!    )*?@AEQqc7M2Mr?   ak:z.mp4.csmil/master.%scecdnPathHTTPz0/asset.ism/manifest.%s?dcp_ver=aos4&videostream=.mp4-http-r!   	format_idtbrrS   widthheight  z&audiostream=FcdnPathDASHmpd-dashmpd_idfatal
cdnPathHLSm3u8r   m3u8_native-hls)entry_protocolm3u8_idr   )rY   intsplitpopjoinlenupdater   rC   extend_extract_mpd_formats_extract_m3u8_formats)r]   videorG   cdn
video_hashpsstfdcdn_providerr~   formatsir|   kh	http_baser   filenamefwidth_heightar}   s                         @r<   _extract_free_formatsNexxIE._extract_free_formats   s   L))$f}}9%f-
-./-.!3#h-'2.AAa!fXQq1vh''B
(1ZL**"0177<"=1	N 4HAGGCLqTBs1Q4yM)C//  ''AT!AAHHQK'I!K$>>ICCAGGCL!A$iS1r#wit4$s?X5$'5se!4
  !tzz#|$)HH!,\!_!="-l1o">  q!3:,//QW# $ #2(1773<?:A54NN444[/77e}E 5 3 4 	t11\*F33Xu(SE,e 2 M 	N r?   c                   ^^ US   mTS   nUS:X  d   eTS   TS   TS   TS   4u  pEpg[        US[        S	9mS+UU4S jjnU" 5       n	/ n
U
R                  U R                  U	 U SU SU SU STR	                  S5      =(       d    U S3USU S3SS95        U
R                  U R                  U	 U SU SU SU SU S3X# S3SS95        U" S5      nTR	                  S5      =(       d    S
nUR                  S5      nU Hk  nUR                  S5      n[        U5      S:w  a  M%  [        US   SS9nU
R                  U U S U SUS!    S"3U SUS#    U(       a  SU 3OS
 3US$.5        Mm     TR	                  S%5      =(       d    S
nUR                  S5      nU H  nUR                  S5      n[        U5      S:w  a  M%  [        US#   5      n[        US   R                  S&5      5      S!:X  a  US   R                  S&5      OS'u  nnU U SU SU SUS!    S(3	U S)U(       a  SU 3OS
 3U[        U5      [        U5      S*.nU
R                  U5        M     U
$ ),Nrl   rm   3qqAccountqPrefixqLocatorqHash)protectiondatakeyrM   r{   c                    > S H9  nTR                  SU  SUR                  5        35      nU(       d  M1  SU SU 3s  $    SU R                  5       S:X  a  SOS S	3T(       a  S
T S3-   $ S-   $ )Nr{   r   	cdnShieldHTTPhttp://zhttp://sdn-global-prog	streamingz-cache.3qsdn.com/zs/rb   r{   )getupperlower)shield_typesecure
cdn_shieldprotection_keyr}   s      r<   get_cdn_shield_base7NexxIE._extract_3q_formats.<locals>.get_cdn_shield_base   s    #(__yT&,,.IY-Z[
:!&ZL99 $ (+2C2C2E2OU`'aars  R`y{  }K  |L  LM  xN  i  i  fh  i  ir?   z/files/rb   -	qHEVCHashz.ism/manifest.m3u8r   r   Fr   r   z.ism/manifest.mpdr   r   ProgqReferencesrw   r      r   r   )scalez	/uploads/r   z.webmr   r   rv   rS   )NNr   r   )r!   r   r   r   r   )r{   )
r
   rY   r   r   r   r   r   r   r   rC   )r]   r   rG   r   q_accq_prefix	q_locatorq_hashr   stream_baser   progressive_baseq_referencesfdsr   ssr   azure_file_distributionr   r   r   r   r}   s                        @@r<   _extract_3q_formatsNexxIE._extract_3q_formats   s   L))$d{{-8-DkR[F\^ijt^u  xC  DK  xL  .L*%,CA	i 	i *+t11mE7'(1YKqqYdIeIoioHp  qC  DeuD\ 2 @ 	A 	t00mE7'(1YKqqPabuE]% 1 9 	: /v6"}5;  %B#B2w!|be40CNN*+E7)E7!BqE7%P #uAbeW#qY2,FG   #.//2I"J"Pb%++C0B#B2w!|be$C03BqEKK4D0E0JBqEKK,P\ME6*+E7'(1YKqQSTUQVPWW[\ #uFQse9*DE$U+%f-A NN1  r?   c           
        ^ US   mTS   nUS:X  d   eTS   nS)U4S jjnUS   R                  S	5      =(       d    SnU" 5       nS
U;   nSR                  XtX((       a  SOS5      S-   n	[        US [        5      n
U
(       a  U	SU
 3-  n	U R	                  U	S-  USSU S3SS9nUR                  U R                  U	S-  X# S3SS95        UR                  U R                  U	S-  X# S3SS95        U" SS5      nTR                  S5      nU(       a  UR                  S
5      nU(       a  U H  nUR                  S5      n[        U5      S:X  d  M%  [        US   5      nU(       d  M<  U U S U S!US"    S#U S$3	U S%U 3US&.nUS"   R                  S'5      n[        U5      S:X  a,  UR                  [        US   5      [        US"   5      S(.5        UR                  U5        M     U$ )*Nrl   rm   azureazureLocatorr{   Fc                 *  > S H9  nTR                  SU  SUR                  5        35      nU(       d  M1  SU SU 3s  $    STS   ;   a  U(       a  SOS	nOU(       a  S
OSn[        TS   R                  SS5      R                  SS5      5      nSXE4-  $ )Nr   r   r   r   r   fbazureAccountdfr   dr|   nexxplayplusr{   
nexxplayfbzhttp://nx-%s%02d.akamaized.net/)r   r   r   replace)r   staticr   r   prefixaccountr}   s         r<   r   :NexxIE._extract_azure_formats.<locals>.get_cdn_shield_base  s    #(__yT&,,.IY-Z[
:!&ZL99 $ {>22!'S &C+n5==nbQYYZfhjklG47HHHr?   ro   language_rawrw   z{}{}/{}_src{}.ism/Manifest	_manifestz%sc                     U S   S   $ )Nr   tokenrQ   rR   s    r<   rT   /NexxIE._extract_azure_formats.<locals>.<lambda>3  s    Q/09r?   z?hdnts=z(format=m3u8-aapl)r   r   r   r   z(format=mpd-time-csf)r   r   z-mss)ism_idr   r   Trv   r   r   r   rb   _src_r   ru   r   r   r   rS   r   )r{   F)r   r[   r   rY   r   r   r   _extract_ism_formatsr   r   r   r   rC   )r]   r   rG   r   azure_locatorr   languageazure_stream_baseis_mlazure_manifest_urlprotection_tokenr   azure_progressive_baser   r   r   r   r   r   r   r}   s                       @r<   _extract_azure_formatsNexxIE._extract_azure_formats  s_   L))$g~~#N3
	I #''7=2/1x9@@hSUXZ^_ #93@G,<+=">>,,!55e]e4L - / 	t00!88uE]% 1 9 	: 	t00#XTl% 1 Q 	R "5VT!B"-//2I"J")//4CB#B2w!|)"Q%03*@)A-PQRZQ[[`acdeaf`gghilhmmq'r03uF3%-@'*!A
 ,.a5;;s+;L"<0A5 !-8a-I.9,q/.J*" !# $NN1-! $ r?   c                   ^ U R                  U5      nUR                  S5      =(       d    UR                  S5      nUR                  S5      mS nU4S jnU R                  ST S3TSS9nU(       a5  [        U[        5      (       a   UR                  S	5      nU(       a  U" U5      nU(       Gd;  [        R                  " S
S5       S[        [        R                  " 5       5       S[        R                  " SS5       [        R                  " S
S5       3nU R                  USTUSSSSSSSSSSSSS.SS0S9nUS   S   n	US   S   [        US    5      S  n
U
S [        U
5      [        US!   5      -
   n
S"n[        R                  " SR                  XU
45      R                  5       5      R!                  5       nU R                  US#U S$T 3TS%SSSSS&SSSS'SS(.U	US).S9nU" U5      nUS   nUS*   nUS+   S,   nUS-:X  a  U R#                  UT5      nOGUS.:X  a  U R%                  UT5      nO.US/:X  a  U R'                  UT5      nOU R)                  U S03T5        0 nUR                  S15      =(       d    /  GH   nUR                  S25      (       a  UR+                  UR                  S3S45      / 5      R-                  S5S6R                  S7 [/        US2   5       5       5      UR                  S85      =(       d    UR                  S*5      S9.5        M  UR                  S:5      (       d  M  UR+                  UR                  S3S45      / 5      R-                  US:   UR                  S;5      UR                  S85      =(       d    UR                  S*5      S<.5        GM#     TUUR                  S=5      UR                  S>5      [1        UR                  S?5      5      UR                  S@5      =(       d    UR                  SA5      =(       d    S [3        USB [4        5      [7        UR                  SC5      5      [1        UR                  SD5      5      [9        USE[        SSF9[9        USG[        SSF9[9        USH[4        SI9WUSJ.$ )KNrF   domain_id_sr   c                    > [        U [        5      (       a  U $ [        U [        5      (       a.  [        T5      nU  H  n[	        US [        5      U:X  d  M  Us  $    g )Nc                     U S   S   $ )Nro   IDrQ   rR   s    r<   rT   :NexxIE._real_extract.<locals>.find_video.<locals>.<lambda>g  s    AiL,>r?   )
isinstancedictlistr   r   )rf   vidvrG   s      r<   
find_video(NexxIE._real_extract.<locals>.find_videoa  sQ    &$''FD))(mAq">DK    r?   z!https://arc.nexx.cloud/api/video/z.jsonF)r   rf   r   rt   r   i'  i 	   zsession/initr{   019201080z6.0.00html5zen-US1)nxp_devh	nxp_userhprecidplaylicensescreenxscreenyplayerversiongateway	adGatewayexplicitlanguageaddTextTemplatesaddDomainData
addAdModelzX-Request-Enable-Auth-Fallbackrc   ro   ciddevicedomaintokenr   rs   byidzvideos/rb   zAlanguage,channel,format,licenseby,slug,fileversion,episode,seasonvttpersons)additionalfieldsaddInteractionOptionsaddStatusDetailsaddStreamDetailsaddFeaturesaddCaptions	addScenesaddChaptersaddHotSpotsaddConnectedMedia
addBumpers)zX-Request-CIDzX-Request-Tokenr   rl   rm   r   rn   r   z$ formats are currently not supportedcaptiondatard   r   ensrtz

c           	   3      #    U  H8  u  pUS -    S[        US   S-  5       S[        US   S-  5       SUS    3v   M:     g7f)r   
frommsr   z --> tomscaptionN)r	   ).0r   lines      r<   	<genexpr>'NexxIE._real_extract.<locals>.<genexpr>  s      (?'=GA q5'$:4>D;P$Q#RRWXnostzo{  C  pC  YD  XE  EG  HL  MV  HW  GX  Y'=s   A Alanguage_long)r   rd   namer!   r[   )r!   r   r?  subtitler   yearstudiostudio_adrefc                     U S   S   $ )N	imagedatathumbrQ   rR   s    r<   rT   &NexxIE._real_extract.<locals>.<lambda>  s    ;!8r?   runtimeuploaded)episodedataro   r)   )rN   get_all)rJ  r*   )connectedmedia.r   rM   )r   r   r   r   release_yearr   r   r   r   r'   r(   castr   	subtitles)_match_valid_urlr9   rg   r  r  r   randomrandintr   timeri   r   hashlibr"   r   encode	hexdigestr   r   r   raise_no_formats
setdefaultrC   	enumerater   r   rY   r   r
   )r]   r!   r;   rF   r   r  r^   rf   	device_idr!  secretoprequest_tokenro   r   r   r   rP  subrG   s                      @r<   _real_extractNexxIE._real_extractZ  s   $$S)JJ{+Htzz-/H	::d#	 &&/z?E ' # 
8T22\\(+F"6* !>>!Q/0#diik2B1C1V^^TY[`EaDbcicqcqrsuvcwbxyI^^I~x%"!!!)"$+$'!$!O 1# $ F$ #E*C H%m4S15F5GHFAc&kC	",>>?FB $KK/0779;;D9;  ^^WRD(4h(k-0(+(+#&#(!$#&#&)2"%F &)'4 $ F$ v&E	" L!),'>11%BGF]00AGD[..uh?G!!SE)M"NPXY	99]+1r1Cwwv$$SWWZ%>CJJ "KK (?'0V'=(? ?  GGO4H8HL  $$SWWZ%>CJJu:778,GGO4H8HL  2"  Z0";;}5'F(;<{{8,SN0KSt 8#?&w{{9'=>$W[[%<=*>c[`b)=SZ_a (HX[\"#
 	
r?   rQ   )__name__
__module____qualname____firstlineno__
_VALID_URL_TESTSstaticmethodr=   classmethodrH   r_   ri   r   r   r   r`  __static_attributes__rQ   r?   r<   r   r      sr   J B1)0A#1#%
 5!& E=AA1#%" 
  T
%, "19=A1#%

  "1;$A1#%

 5" C !  >[PFd 2 2  &	 9=b  ?B9v@DJ
r?   r   c                   V    \ rS rSrSrS/rSSSSSS	S
SSSSSS.
SS0S.SSS./rS rSrg)NexxEmbedIEi  zHhttps?://embed\.nexx(?:\.cloud|cdn\.com)/\d+/(?:video/)?(?P<id>[^/?#&]+)zb<iframe[^>]+\bsrc=(["\'])(?P<url>(?:https?:)?//embed\.nexx(?:\.cloud|cdn\.com)/\d+/(?:(?!\1).)+)\1z6http://embed.nexx.cloud/748/KC1614647Z27Y7T?autoplay=1 16746bfc28c42049492385c989b26c4a161464r   zNervenkitzel AchterbahnzKarussellbauer in Deutschlandz$md5:ffe7b1cc59a01f585e0569949aef73ccr   r   i
  igS20140305r   r+   T)r!   r"   r#   r,   z3https://embed.nexx.cloud/11888/video/DSRTO7UVOX06S7r4   c                     U R                  U5      nU R                  X5      nU R                  [        R	                  U5      [        R                  5       S9$ )N)ie)	_match_id_download_webpage
url_resultr   _extract_urlie_key)r]   r!   embed_idr:   s       r<   r`  NexxEmbedIE._real_extract  sD    >>#&((7v227;PPr?   rQ   N)	rb  rc  rd  re  rf  _EMBED_REGEXrg  r`  rj  rQ   r?   r<   rl  rl    sd    \JyzLG1.8A#1#%
 T
& E%F.Qr?   rl  )rU  rR  r7   rT  commonr   utilsr   r   r   r	   r
   r   r   r   rl  rQ   r?   r<   <module>r|     s@      	  !  R
] R
j Q-  Qr?   