
    VGhQ                         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mZm	Z	m
Z
mZmZmZ  G d de      Z G d d	e      Zy)
    N   )InfoExtractor   )ExtractorErrorint_or_noneparse_durationsrt_subtitles_timecodetraverse_objtry_geturlencode_postdatac                      e 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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/d0d1d'	ddd2dd3d4dd3d5dd3d6dd3gZed7        Zed8        Zd9 Z	d:i fd;Z
d< Zd= Zd> Zd? Zy:)@NexxIEaa  (?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                 X    t        j                  d|       }|r|j                  d      S d S )Nze<script\b[^>]+\bsrc=["\'](?:https?:)?//(?:require|arc)\.nexx(?:\.cloud|cdn\.com)/(?:sdk/)?(?P<id>\d+)r   )researchgroup)webpagemobjs     ^/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/nexx.py_extract_domain_idzNexxIE._extract_domain_idm   s.    yyt $(tzz$1T1    c                     g }t         j                  |      }|r2t        j                  d|      D ]  }|j	                  d| d|         |S )NzT(?is)onPLAYReady.+?_play\.(?:init|(?:control\.)?addPlayer)\s*\(.+?\s*,\s*["\']?(\d+)https://api.nexx.cloud/v3/z/videos/byid/)r   r<   r6   findallappend)clsr    r9   entries	domain_idvideo_ids         r;   _extract_embed_urlszNexxIE._extract_embed_urlst   sd    
  --g6	JJk U 0=
SUU r=   c                 0   t        |dt              r1| j                  dj                  | j                  |d   d                t        t        |d       xs d      }d|cxk  rdk  ry  t        dj                  | j                  |d   d	         d
      )N)metadatanoticeexpected_typez{} said: {}rH   rI   c                     | d   d   S )NrH   status xs    r;   <lambda>z&NexxIE._handle_error.<locals>.<lambda>   s    *h 7 r=      i,  	errorhintT)expected)r
   strreport_warningformatIE_NAMEr   r   r   )selfresponserM   s      r;   _handle_errorzNexxIE._handle_error   s    "8L 4 4T\\8JCWX`Ca bcW79 @<?A&3   x
/CK/PQ 	r=   Nc                     d|d<   | j                  d| d| |d| dt        |      |      }| j                  |       |d   S )	Nz0application/x-www-form-urlencoded; charset=UTF-8zContent-Typer?   /zDownloading z JSONdataheadersresult)_download_jsonr   r[   )rY   rD   pathrE   r_   r`   ra   s          r;   	_call_apizNexxIE._call_api   se    "T$$(1TF;X4&&-?-E %  	6"hr=   c           
         |d   d   }|dk(  sJ |d   d   }t        d         }d   dk(  r%d	t        |      z  d d d
   }|d|dd  d|dd  z  }|d| d| dz  }d|z   }d   j                  d      }d   }	fd}
g }|	dk(  rD|dz  }|D ]3  }|j                  d      }||d    |
t        |d               z   dz   z  }5 |dz  }n"|	dk(  r|j                  d      }|j                         }dj	                  |      x}}|d   z  }|dz  }|D ]  }|j                  d      }t        |d         }| |d     |
|       d}|dz   |z   | d| |d}|d   j                  d      }t        |      dk(  r,|j                  t        |d         t        |d         d       |j                  |       |d|d z   z   }||dz   z  } |d d
 d!z   j                  d      d   z   }nJ |	dk(  r/|j                  | j                  |d#   d$fz  || d%d"&             |j                  | j                  |d'   d(fz  |d)d*| d+d",             |S )-N
streamdatacdnTypefreegeneralhashoriginalDomainapplyFolderHierarchyr   z%04dr]   r   r      _z	http://%sazureFileDistribution,cdnProviderc                 "    d   dk(  rd|  S dS )NapplyAzureStructurer   ro    rN   )pstream_datas    r;   p0z(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tbrrP   widthheight  z&audiostream=FcdnPathDASHmpd-dashmpd_idfatal
cdnPathHLSm3u8r   m3u8_native-hls)entry_protocolm3u8_idr   )rU   intsplitpopjoinlenupdater   rA   extend_extract_mpd_formats_extract_m3u8_formats)rY   videorE   cdn
video_hashpsstfdcdn_providerrx   formatsirv   kh	http_baser   filenamefwidth_heightarw   s                         @r;   _extract_free_formatsz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 0GGCLQqTBs1Q4yM)C//0 ''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                    |d   d   }|dk(  sJ d   d   d   d   f\  }}}}t        |dt        	      d+fd	} |       }	g }
|
j                  | j                  |	 | d| d| d| dj	                  d      xs | d|d| dd             |
j                  | j                  |	 | d| d| d| d| d|| dd              |d      }j	                  d      xs d
}|j                  d      }|D ]f  }|j                  d      }t        |      dk7  r#t        |d   d      }|
j                  | | d | d|d!    d"| d|d#    |rd| nd
 |d$       h j	                  d%      xs d
}|j                  d      }|D ]  }|j                  d      }t        |      dk7  r#t        |d#         }t        |d   j                  d&            d!k(  r|d   j                  d&      nd'\  }}| | d| d| d|d!    d(	| d)|rd| nd
 |t        |      t        |      d*}|
j                  |        |
S ),Nrf   rg   3qqAccountqPrefixqLocatorqHash)protectiondatakeyrJ   ru   c                     dD ]3  }j                  d|  d|j                                }|s+d| d| c S  d| j                         dk(  rdnd d	rd
 dz   S dz   S )Nru   r   	cdnShieldHTTPhttp://zhttp://sdn-global-prog	streamingz-cache.3qsdn.com/zs/r]   ru   )getupperlower)shield_typesecure
cdn_shieldprotection_keyrw   s      r;   get_cdn_shield_basez7NexxIE._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/r]   -	qHEVCHashz.ism/manifest.m3u8r   r   Fr   r   z.ism/manifest.mpdr   r   ProgqReferencesrq   rz      r   r   )scalez	/uploads/r   z.webmr   r   rp   rP   )NNr}   r~   )r    r   r   r   r   )ru   )
r
   rU   r   r   r   r   r   r   r   rA   )rY   r   rE   r   q_accq_prefix	q_locatorq_hashr   stream_baser   progressive_baseq_referencesfdsr   ssr   azure_file_distributionr   r   r   r   rw   s                        @@r;   _extract_3q_formatszNexxIE._extract_3q_formats   s   L))$d{{-8-DkR[F\^ijt^u  xC  DK  xL  .L*xF%,CA	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           
         |d   d   }|dk(  sJ d   }d)fd	}|d   j                  d	      xs d} |       }d
|v }dj                  ||||rdnd      dz   }	t        |d t              }
|
r|	d|
 z  }	| j	                  |	dz  |dd| dd      }|j                  | j                  |	dz  || dd             |j                  | j                  |	dz  || dd              |dd      }j                  d      }|r|j                  d
      }|r|D ]  }|j                  d      }t        |      dk(  s#t        |d         }|s4| | d | d!|d"    d#| d$	| d%| |d&}|d"   j                  d'      }t        |      dk(  r,|j                  t        |d         t        |d"         d(       |j                  |        |S )*Nrf   rg   azureazureLocatorru   Fc                    dD ]3  }j                  d|  d|j                                }|s+d| d| c S  dd   v r|rdnd	}n|rd
nd}t        d   j                  dd      j                  dd            }d||fz  S )Nr   r   r   r   r   fbazureAccountdfr   drv   nexxplayplusru   
nexxplayfbzhttp://nx-%s%02d.akamaized.net/)r   r   r   replace)r   staticr   r   prefixaccountrw   s         r;   r   z: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=   ri   language_rawrq   z{}{}/{}_src{}.ism/Manifest	_manifestz%sc                     | d   d   S )Nr   tokenrN   rO   s    r;   rQ   z/NexxIE._extract_azure_formats.<locals>.<lambda>3  s    Q/09 r=   z?hdnts=z(format=m3u8-aapl)r   r   r   r   z(format=mpd-time-csf)r   r   z-mss)ism_idr   r   Trp   rz   r   r   r]   _src_r   ro   r}   r~   r   rP   r   )ru   F)r   rW   r   rU   r   r   r   _extract_ism_formatsr   r   r   r   rA   )rY   r   rE   r   azure_locatorr   languageazure_stream_baseis_mlazure_manifest_urlprotection_tokenr   azure_progressive_baser   r   r   r   r   r   r   rw   s                       @r;   _extract_azure_formatszNexxIE._extract_azure_formats  sh   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*@)A-PQRZQ[[`acdeaf`gghilhmmq'r03uF3%-@'*!A
 ,.a5;;s+;L"<0A5 !-8a-I.9,q/.J*" !# $NN1-!.$ r=   c                    | j                  |      }|j                  d      xs |j                  d      }|j                  d      d }fd}| j                  d dd      }|r+t        |t              r|j                  d	      }|r ||      }|s=t        j                  d
d       dt        t        j                                dt        j                  dd       t        j                  d
d       }| j                  |d|dddddddddddddddi      }|d   d   }	|d   d   t        |d          d  }
|
d t        |
      t        |d!         z
   }
d"}t        j                  dj                  |||
f      j                               j!                         }| j                  |d#| d$ d%ddddd&dddd'dd(|	|d)      } ||      }|d   }|d*   }|d+   d,   }|d-k(  r| j#                  |      }nE|d.k(  r| j%                  |      }n-|d/k(  r| j'                  |      }n| j)                  | d0       i }|j                  d1      xs g D ]	  }|j                  d2      rz|j+                  |j                  d3d4      g       j-                  d5d6j                  d7 t/        |d2         D              |j                  d8      xs |j                  d*      d9       |j                  d:      s|j+                  |j                  d3d4      g       j-                  |d:   |j                  d;      |j                  d8      xs |j                  d*      d<        ||j                  d=      |j                  d>      t1        |j                  d?            |j                  d@      xs |j                  dA      xs d t3        |dB t4              t7        |j                  dC            t1        |j                  dD            t9        |dEt        dF      t9        |dGt        dF      t9        |dHt4        I      |dJS )KNrD   domain_id_sr   c                     t        | t              r| S t        | t              r+t              }| D ]  }t	        |d t              |k(  s|c S  y )Nc                     | d   d   S )Nri   IDrN   rO   s    r;   rQ   z:NexxIE._real_extract.<locals>.find_video.<locals>.<lambda>g  s    AiL,> r=   )
isinstancedictlistr   r   )ra   vidvrE   s      r;   
find_videoz(NexxIE._real_extract.<locals>.find_videoa  sP    &$'FD)(m !Aq">DK ! r=   z!https://arc.nexx.cloud/api/video/z.jsonF)r   ra   r   rn   rz   i'  i 	   zsession/initru   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-Fallbackr^   ri   ciddevicedomaintokenr   rm   byidzvideos/r]   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   rf   rg   r   rh   r   z$ formats are currently not supportedcaptiondatar_   r   ensrtz

c           	   3      K   | ]8  \  }}|d z    dt        |d   dz         dt        |d   dz         d|d     : yw)r   
frommsr   z --> tomscaptionN)r	   ).0r   lines      r;   	<genexpr>z'NexxIE._real_extract.<locals>.<genexpr>  s      (?#At 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 language_long)r   r_   namer    rW   )r    r   r/  subtitler   yearstudiostudio_adrefc                     | d   d   S )N	imagedatathumbrN   rO   s    r;   rQ   z&NexxIE._real_extract.<locals>.<lambda>  s    ;!8 r=   runtimeuploaded)episodedatari   r(   )rK   get_all)r9  r)   )connectedmedia.r   rJ   )r   r   r   r   release_yearr   r   r   r   r&   r'   castr   	subtitles)_match_valid_urlr8   rb   r   r   r   randomrandintr   timerd   r   hashlibr!   r   encode	hexdigestr   r   r   raise_no_formats
setdefaultrA   	enumerater   r   rU   r   r
   )rY   r    r:   rD   r   r   rZ   ra   	device_idr  secretoprequest_tokenri   r   r   r   r?  subrE   s                      @r;   _real_extractzNexxIE._real_extractZ  s   $$S)JJ{+Htzz-/H	::d#	 &&/z?E ' # 
8T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Y/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 	Cwwv$$SWWZ%>CJJ "KK (?'0V'=(? ?  GGO4H8HL  $$SWWZ%>CJJu:778,GGO4H8HL 	"  Z0";;}5'F(;<{{8,SN0KSt 8#?&w{{9'=>$W[[%<=*>c[`b)=SZ_a (HX[\"#
 	
r=   )__name__
__module____qualname__
_VALID_URL_TESTSstaticmethodr<   classmethodrF   r[   rd   r   r   r   rO  rN   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                   N    e Zd ZdZdgZddddddd	d
ddddd
ddiddddgZd Zy)NexxEmbedIEzHhttps?://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/DSRTO7UVOX06S7r3   c                     | j                  |      }| j                  ||      }| j                  t        j	                  |      t        j                               S )N)ie)	_match_id_download_webpage
url_resultr   _extract_urlie_key)rY   r    embed_idr9   s       r;   rO  zNexxEmbedIE._real_extract  sF    >>#&((h7v227;PPr=   N)rP  rQ  rR  rS  _EMBED_REGEXrT  rO  rN   r=   r;   rX  rX    sd    \JyzLG1.8A#1#%
 T
& E%F.Qr=   rX  )rD  rA  r6   rC  commonr   utilsr   r   r   r	   r
   r   r   r   rX  rN   r=   r;   <module>rg     s@      	  !  R
] R
j Q-  Qr=   