
    yfR                         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	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   )
compat_str)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     7/usr/lib/python3/dist-packages/yt_dlp/extractor/nexx.py_extract_domain_idzNexxIE._extract_domain_idn   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=   r7   findallappend)clsr!   r:   entries	domain_idvideo_ids         r<   _extract_embed_urlszNexxIE._extract_embed_urlsu   s[    
  --g6	JJk -  (,-- r>   c                    t        |dt              r&| j                  | j                  d|d   d          t	        t        |d       xs d      }d|cxk  rdk  ry  t        | j                  d|d   d	   d
      )N)metadatanoticeexpected_typez said: rI   rJ   c                     | d   d   S )NrI   status xs    r<   <lambda>z&NexxIE._handle_error.<locals>.<lambda>   s    *h 7 r>      i,  	errorhintT)expected)r   strreport_warningIE_NAMEr   r   r   )selfresponserN   s      r<   _handle_errorzNexxIE._handle_error   s    "8Lx
?ST\?] ^_W79 @<?A&3 !\\8J+?+LM 	r>   Nc                     d|d<   | j                  d|d||d|z  t        |      |      }| j                  |       |d   S )Nz0application/x-www-form-urlencoded; charset=UTF-8zContent-Typer@   /zDownloading %s JSONdataheadersresult)_download_jsonr   r[   )rY   rE   pathrF   r_   r`   ra   s          r<   	_call_apizNexxIE._call_api   sY    "T$$1:DA8!D(/A$/G %  	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||fz  |d}|d   j                  d      }t        |      dk(  r,|j                  t        |d         t        |d         d       |j                  |       |d |d!z  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&|z  d#'             |j                  | j                  |d(   d)fz  |d*d+d,|z  d#-             |S ).N
streamdatacdnTypefreegeneralhashoriginalDomainapplyFolderHierarchyr   z%04dr]   r   r      _z	http://%sazureFileDistribution,cdnProviderc                 "    d   dk(  rd| z  S dS )NapplyAzureStructurer   z_%s rO   )pstream_datas    r<   p0z(NexxIE._extract_free_formats.<locals>.p0   s     +,A Ba G519OROr>   ak:z.mp4.csmil/master.%scecdnPathHTTPz0/asset.ism/manifest.%s?dcp_ver=aos4&videostream=.mp4
%s-http-%dr!   	format_idtbrrQ   widthheightz:%s  z&audiostream=FcdnPathDASHmpd%s-dashmpd_idfatal
cdnPathHLSm3u8r   m3u8_native%s-hls)entry_protocolm3u8_idr   )r   intsplitpopjoinlenupdater   rB   extend_extract_mpd_formats_extract_m3u8_formats)rY   videorF   cdnrj   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}}Y'$456-.!3#h-'2.Aa!fa!f--B
8T**"0177<"=1	P 4HA 0GGCLQqTBs1Q4yM)C//0 ''AT!AAHHQK'I!K$>>ICCA GGCL!A$i+,adBsG<$s?X5!-c
!:
  !tzz#|$)HH!,\!_!="-l1o">  q!ud
33QW#$ #2(1773<?:A54NN444[/77 3e 5 5 6 	t11\*F33Xu((S. 2 O 	P 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$|z  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$|z  nd
 |t        |      t        |      d+}|
j                  |        |
S )-Nrf   rg   3qqAccountqPrefixqLocatorqHash)protectiondatakeyrK   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    # @(__KQWQ]Q]Q_-`a
,2J??@ (+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   z-hlsFr   r   z.ism/manifest.mpdz-dashr   ProgqReferencesrq   rz      r   r   )scalez	/uploads/r   z.webmr   z-%sr   rp   rQ   )NNr}   z-http-)r!   r   r   r   r   )ru   )
r   rV   r   r   r   r   r   r   r   rB   )rY   r   rF   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eWCUS[R,HI 		 #.//2I"J"Pb%++C0 	B#B2w!|be$C03BqEKK4D0E0JBqEKK,P\ME6*+E7'(1YKqQSTUQVPWW[\ #uF#53;2*FG$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|d|rdndddz   }	t        |d t              }
|
r|	d|
z  z  }	| j                  |	dz  |ddd|z  d      }|j	                  | j                  |	dz  |d|z  d             |j	                  | j                  |	dz  |d|z  d              |dd      }j                  d      }|r|j                  d
      }|r|D ]  }|j                  d      }t        |      d k(  s#t        |d!         }|s4d"||||d#   |fz  d$||fz  |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    # 
M(__KQWQ]Q]Q_-`a
,2J??
M
 ;~66%+TF$*SFk.9AA.RTU]]^jlnop8FG;LLLr>   ri   language_rawrq   r]   _src	_manifestz.ism/Manifestz%sc                     | d   d   S )Nr   tokenrO   rP   s    r<   rR   z/NexxIE._extract_azure_formats.<locals>.<lambda>6  s    Q/09 r>   z	?hdnts=%sz(format=m3u8-aapl)r   r   r   r   z(format=mpd-time-csf)r   r   z%s-mss)ism_idr   r   Trp   rz   r   r   z%s%s/%s_src_%s_%d.mp4r   r~   r   rQ   r   )ru   F)r   r   r   r   r   r   _extract_ism_formatsr   r   r   r   rB   )rY   r   rF   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  sI   L))$g~~#N3	M #''7=2/1x}hSU9UXZ^_ #9:G+0@"@@,,!55e]sN% - 1 	t00!88Y_E 1 ; 	< 	t00#XhnE 1 S 	T "5VT!B"-//2I"J")//4C .B#B2w!|)"Q%0'>$:M8UWXYUZ\_Ba (a-9S#J-F'*	!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z  d      }|r+t        |t              r|j                  d      }|r ||      }|s;d	t        j                  d
d      t        t        j                               t        j                  dd      t        j                  d
d      fz  }| 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                  d"            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        |dHt:        I      |dJS )KNrE   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   IDrO   rP   s    r<   rR   z:NexxIE._real_extract.<locals>.find_video.<locals>.<lambda>k  s    AiL,> r>   )
isinstancedictlistr   r   )ra   vidvrF   s      r<   
find_videoz(NexxIE._real_extract.<locals>.find_videoe  sP    &$'FD)(m !Aq">DK ! r>   z(https://arc.nexx.cloud/api/video/%s.jsonF)r   ra   z
%d:%d:%d%dr   rn   g     @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utf-8z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!   format)r!   r   r.  subtitler   yearstudiostudio_adrefc                     | d   d   S )N	imagedatathumbrO   rP   s    r<   rR   z&NexxIE._real_extract.<locals>.<lambda>  s    ;!8 r>   runtimeuploaded)episodedatari   r)   )rL   get_all)r9  r*   )connectedmedia.r   rK   )r   r   r   r   release_yearr   r   r   r   r'   r(   castr   	subtitles)_match_valid_urlr9   rb   r   r   r   randomrandintr   timerd   r   hashlibr"   r   encode	hexdigestr   r   r   raise_no_formats
setdefaultrB   	enumerater   r   r   r	   r   rV   )rY   r!   r;   rE   r   r   rZ   ra   	device_idr  secretoprequest_tokenri   r   r   r   r?  subrF   s                      @r<   _real_extractzNexxIE._real_extract^  st   $$S)JJ{+Htzz-/H	::d#	 &&6AE ' # 
8T2\\(+F"6* $q!$c$))+&6sE*FNN1a,@(B BI ^^I~x%"!!!)"$+$'!$!O 1# $ F$ #E*C H%m4S15F5GHFAc&kC	",>>?FB $KKY/077@BBK)+  ^^R:H(k-0(+(+#&#(!$#&#&)2"%L &)'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*F&w{{9'=>$W[[%<=*>c[`b)=SZ_a (HX[\"#
 	
r>   )__name__
__module____qualname__
_VALID_URL_TESTSstaticmethodr=   classmethodrG   r[   rd   r   r   r   rO  rO   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BHL
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/DSRTO7UVOX06S7r4   c                     | j                  |      }| j                  ||      }| j                  t        j	                  |      t        j                               S )N)ie)	_match_id_download_webpage
url_resultr   _extract_urlie_key)rY   r!   embed_idr:   s       r<   rO  zNexxEmbedIE._real_extract  sF    >>#&((h7v227;PPr>   N)rP  rQ  rR  rS  _EMBED_REGEXrT  rO  rO   r>   r<   rX  rX    sd    \JyzLG1.8A#1#%
 T
& E%F.Qr>   rX  )rD  rA  r7   rC  commonr   compatr   utilsr   r   r	   r
   r   r   r   r   rX  rO   r>   r<   <module>rh     sC      	  !   W
] W
t Q-  Qr>   