
    V|h>                         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KJr  Sr " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      rg)    N   )InfoExtractor   )ExtractorErrorint_or_nonemimetype2extparse_iso8601try_callupdate_url_queryurl_or_none)traverse_objz|https://production-cdn.dr-massive.com/api/page?device=web_browser&item_detail_expand=all&lang=da&max_list_prefetch=3&path=%sc                   T   \ rS rS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/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)SS)S0S1.S2S30S4.S50 S6S7_S8S	_S9S_S:S;_S<S=_S>S?_S@SA_SBSC_SDSE_SFSG_SHSI_SJS;_SKS0_SLSM_SNSE_SOSP_SQSR_S2SS0S4.STS3SU.SVS3SU.SWS3SU./rSXSYSZS[.r	S\r
S] rS^ rS_rg\)`DRTVIE   aF  (?x)
                    https?://
                        (?:
                            (?:www\.)?dr\.dk/tv/se(?:/ondemand)?/(?:[^/?#]+/)*|
                            (?:www\.)?(?:dr\.dk|dr-massive\.com)/drtv/(?:se|episode|program)/
                        )
                        (?P<id>[\da-z_-]+)
                    FDKdrtvzIhttps://www.dr.dk/tv/se/boern/ultra/klassen-ultra/klassen-darlig-taber-10 25e659cccc9a2ed956110a299fdf5983zklassen-darlig-taber-10mp4u   Klassen - Dårlig taber (10)z$md5:815fe1b7fa656ed80580f31e8b3c79aai蕼[20181009gQ@Klassenz	Klassen Ir   z)urn:dr:mu:bundle:57d7e8216187a4031cfd6f6bz
Episode 10
   i  )idexttitledescription	timestampupload_datedurationseriesseasonseason_number	season_idepisodeepisode_numberrelease_yearzUnable to download f4m manifestzthis video has been removed)urlmd5	info_dictexpected_warningsskipzMhttps://www.dr.dk/tv/se/historien-om-danmark/-/historien-om-danmark-stenalder00831690010zHistorien om Danmark: Stenalderz$md5:8c66dcbc1669bbc6f873879880f37f2ai0/\20190104gsh<a@zmincount:20i  z)urn:dr:mu:bundle:5afc03ad6187a4065ca5fd35zHistorien om Danmark)r   r   r   r   r   r   r   formatsr%   r"   r!   r    r   )r&   r(   r*   z9https://www.dr.dk/drtv/se/frank-and-kastaniegaarden_7176900951930010Frank & Kastaniegaardenz$md5:974e1780934cf3275ef10280204bccb0ii.\20190103i
  67125i  zre:https?://.+)r   r   r   r   release_timestamprelease_dater   r    r"   r%   r!   r   r$   r#   	thumbnailskip_downloadTr&   r(   paramsz<https://www.dr.dk/drtv/se/spise-med-price_-pasta-selv_397445r   00212301010r   r$   r   zSpise med Price: Pasta Selv	alt_titlez1. Pasta Selvr3   20230807r   z$md5:2da9060524fed707810d71080b3d0cd8r   i  r    zSpise med Pricer2   i@Mdr"   397440r#   r4   r!      r   r%   i  	subtitlesz
mincount:2m3u8z0https://www.dr.dk/drtv/episode/bonderoeven_71769)r&   only_matchingz0https://dr-massive.com/drtv/se/bonderoeven_71769z,https://www.dr.dk/drtv/program/jagten_220924da
da_foreignda_combined)DanishLanguageSubtitlesForeignLanguageSubtitlesCombinedLanguageSubtitlesNc                 L   U R                   (       a  g U R                  SS SSS0SSSS.[        R                  " [	        [
        R                  " 5       5      S	/S
S.5      R                  5       S9n[        US S[        14SS9U l         U R                   (       d  [        S5      eg )Nz:https://isl.dr-massive.com/api/authorization/anonymous-ssozDownloading anonymous tokenzcontent-typezapplication/jsonphone_androidr@   true)devicelangsupportFallbackTokenCatalogT)deviceIdscopesoptout)noteheadersquerydatac                     US   S:H  $ )NtypeUserAccount _xs     O/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/drtv.py<lambda>)DRTVIE._real_initialize.<locals>.<lambda>   s    !F)}*D    valueFget_allzUnable to get anonymous token)
_TOKEN_download_jsonjsondumpsstruuiduuid4encoder   r   )selftoken_responses     r[   _real_initializeDRTVIE._real_initialize   s    ;;,,H$. 29 *(. JJ

-$+   vx -  #DgPSuU_df{{ !@AA r^   c                 L  ^ U R                  U5      nU R                  X5      nU R                  SUSUSS9=(       d    0 n[        USSSSS	[        14SS
9mT(       a  TR                  S5      nO3UR                  SS5      S   nU R                  SU 3USSSSSSSSSS.S9m[        U4S j5      =(       d    UnU R                  SU S3USSSSSS SS!.S"S#U R                   30S$9n/ n0 n	[        US% 5       GH3  n
U
R                  S&S'5      nU
R                  S(5      nS nS)nUS*;   a  SnUS+U 3-  nS+U 3nOUS,:X  a  SnU R                  U
R                  S-5      US.XSS/9u  nnUR                  U5        [        U
S0S1 [        145      nU(       d  U R                  UU	S29  U H  nUR                  S35      =(       d    SnU	R                  U R                  R                  UU5      U-   / 5      R                  US4   [!        UR                  S&5      5      =(       d    S5S6.5        M     GM6     U(       d*  [        TS75      (       a  U R#                  U R$                  S89  UUU	S9.[        TS:S;S<S=S>S?[&        14S@[(        14SASBSCSD[(        14SESFSG[(        14SH[(        14SI.5      E$ )JNzwindow\.__data\s*=rS   F)fatalcachepage.)N)entriesr   itemr`   r   rY   r   z0https://production-cdn.dr-massive.com/api/items/z'Attempting to download backup item dataweb_browserallzidp,ldp,rptdkfalser@   zdrtv,optedout	Anonymous)rI   expandffgeoLocationisDeviceAbroadrJ   segmentssub)rP   rR   c                  4   > T S   R                  SS5      S   $ )NcustomId:r   rt   )rsplit)rs   s   r[   r\   &DRTVIE._real_extract.<locals>.<lambda>   s    D$4$;$;C$CB$Gr^   z4https://production.dr-massive.com/api/account/items/z/videoszDownloading stream datastreamzHD-1080)deliveryrI   r{   rJ   
resolutionr   authorizationzBearer )rP   rR   rQ   c                     US   $ )Nr&   rW   rX   s     r[   r\   r      s    ahr^   formatnaaccessService )SpokenSubtitlesSignLanguageVisuallyInterpreted-StandardVideor&   r   )r   
preferencem3u8_idro   r=   c                     [        US   5      $ )Nlink)r   )rY   vs     r[   r\   r      s    KXYZ`XaLbr^   )targetlanguager   vtt)r&   r   )r    customFieldsIsGeoRestricted)	countries)r   r-   r=   r   contextualTitler   )images	wallpaperr   BroadcastTimeDKr   )r    showr   )r    r   r    seasonNumberseasonIdepisodeNameepisodeNumberreleaseYear)r   r9   r   r4   r2   r   r   r    r!   r"   r#   r$   r%   )	_match_id_download_webpage_search_jsonr   dictgetr   rc   r
   rb   #_extract_m3u8_formats_and_subtitlesextend_merge_subtitles
setdefaultSUBTITLE_LANGSappendr   raise_geo_restricted_GEO_COUNTRIESr	   r   )rj   r&   url_slugwebpage	json_dataitem_idvideo_idstream_datar-   r=   r   	format_idaccess_servicer   subtitle_suffixfmtssubsapi_subtitles	sub_trackrJ   rs   s                       @r[   _real_extractDRTVIE._real_extract   sA   >>#&((7%%!7FHE & K QNP 	.DftfU_dfhhtnGooc1-b1G&&B7)Lg>+#'#'&-  /&	G ' D GHSG))B7)7SU]*$'#'"3 (74;;-)@A * 	C 	";1FHF

8T2I#ZZ8NJ O![[
q 011	$%n%5"6?2
AA

5!8:hm B oJD$NN4 (+?beidj1klM %%d9%=*	 }}Z08D$$T%8%8%<%<T4%H?%Z\^_ff$V,'	h(?@IEh  +' I4 <.[\\%%0C0C%D "
 4 .,4&46G-%Y'+75-"*N[M!J'(#2[M"B!. >" 	
 	
r^   )rb   )__name__
__module____qualname____firstlineno__
_VALID_URL_GEO_BYPASSr   IE_NAME_TESTSr   rb   rl   r   __static_attributes__rW   r^   r[   r   r      s)   J KVNGZ1+3A#%!D#  
  @@-). _6A#% $ D,,
 .%( K.A!+&/  !/0*
$ T
'0 N
-
5
 a
 2	

 
 J
 A
 
 '
  
 
 4
 *
 R
 '
  D!
" #
( V
-4 B B >{`FF $($0%2N FB.W
r^   r   c                   @    \ rS rSrSrSrS/rSSSSS	.S
S0S.rS rSr	g)
DRTVLiveIE   z	drtv:livez:https?://(?:www\.)?dr\.dk/(?:tv|TV)/live/(?P<id>[\da-z-]+)r   zhttps://www.dr.dk/tv/live/dr1dr1r   z5re:^DR1 [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$)r   r   r   r5   Tr6   c                    U R                  U5      nU R                  SU-   U5      nUS   n/ nUR                  S/ 5       H  nUR                  S5      nU(       d  M  UR                  S5      nUR                  S/ 5       H  n	U	R                  S/ 5       H  n
U
R                  S5      nU(       d  M  [        U S	U 3S
S05      nUS:X  a$  UR	                  U R                  XSUSSS95        MZ  US:X  d  Mb  UR	                  U R                  [        U S	U 3SS05      X(SS95        M     M     M     UUUR                  S5      USS.$ )Nz,https://www.dr.dk/mu-online/api/1.0/channel/TitleStreamingServersServerLinkType	QualitiesStreamsStream/br   HLSr   FT)r   ro   liveHDShdcorez3.7.0)f4m_idro   PrimaryImageUri)r   r   r4   r-   is_live)r   rc   r   r   r   _extract_m3u8_formats_extract_f4m_formats)rj   r&   
channel_idchannel_datar   r-   streaming_serverserver	link_typequalityr   stream_path
stream_urls                r[   r   DRTVLiveIE._real_extract  s   ^^C(
**:ZG W% , 0 01CR H%))(3F(,,Z8I+//R@%kk)R8F"(**X"6K& !1!(!K=1C9">J E)t'A'A&E$-U (B (G H #e+t'@'@AQ%ha}5'7JBL& (A (G H 9 A !I, %))*;<
 	
r^   rW   N)
r   r   r   r   r   r   r   _TESTr   r   rW   r^   r[   r   r      s<    GNJVN.L
 T
E#
r^   r   c            	       \    \ rS 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.SS./rS rSr	g)DRTVSeasonIEi1  zdrtv:seasonz\https?://(?:www\.)?(?:dr\.dk|dr-massive\.com)/drtv/saeson/(?P<display_id>[\w-]+)_(?P<id>\d+)r   z<https://www.dr.dk/drtv/saeson/frank-and-kastaniegaarden_90089008frank-and-kastaniegaardenr/   i  zSeason 2008)r   
display_idr   r   r!   r9      r&   r(   playlist_mincountz<https://www.dr.dk/drtv/saeson/frank-and-kastaniegaarden_87618761i  zSeason 2009r   c                 2   U R                  U5      R                  SS5      u  p#U R                  [        SU SU 3-  U5      n[	        US5       Vs/ s H  nSSUS    3[
        R                  5       UR                  S	5      UR                  S
5      UR                  S5      UR                  S5      [	        US5      [	        US5      UR                  S5      S.
PM     nnSUU[	        US5      [	        US5      [	        US5      U[	        US5      S.$ s  snf )Nr   r   z/saeson/rY   )rr   r   rs   episodesitemsr&   https://www.dr.dk/drtvpathr   r   r   shortDescriptionrr   r   rs   r   rr   r   rs   r   r   )
_typer&   ie_keyr   r9   r#   r   r   r!   r$   playlistrr   r   rs   r   )r   r   r   r   r9   r   rr   r!   )_match_valid_urlgrouprc   
SERIES_APIr   r   r   r   )rj   r&   r   r"   rS   r#   rr   s          r[   r   DRTVSeasonIE._real_extractM  s4    $ 5 5c : @ @t T
"":(:,a	{0S#SU_` &d,WXZ Yg +GFO+<=mmo[[) %67{{=1";;'9:"4)HI)$0VW%kk/:
 Y 	 Z  $!$(GH%d,UV"4)HI)$0VW	
 		
Zs   BDrW   N
r   r   r   r   r   r   r   r   r   r   rW   r^   r[   r   r   1  sj    GpJVNM5./!&
  N5./!&
  F0
r^   r   c                   B    \ rS rSrSrSrS/rSSSSSS	S
.SS./rS rSr	g)DRTVSeriesIEij  zdrtv:seriesz[https?://(?:www\.)?(?:dr\.dk|dr-massive\.com)/drtv/serie/(?P<display_id>[\w-]+)_(?P<id>\d+)r   z;https://www.dr.dk/drtv/serie/frank-and-kastaniegaarden_69546954r   r/   r   )r   r   r   r   r9   r<   r   c                    U R                  U5      R                  SS5      u  p#U R                  [        SU SU 3-  U5      n[	        US5       Vs/ s Hc  nSSUR                  S5       3[        R                  5       UR                  S	5      UR                  S
5      [	        US5      [	        US5      S.PMe     nnSUU[	        US5      [	        US5      [	        US5      US.$ s  snf )Nr   r   z/serie/rY   )rr   r   rs   r   seasonsr   r&   r   r   r   r   r   r   )r   r&   r   r   r9   r   r!   r  r  )r   r   r   r   r9   r   rr   )r  r  rc   r  r   r   r   r   )rj   r&   r   	series_idrS   r    rr   s          r[   r   DRTVSeriesIE._real_extractz  s    $ 5 5c : @ @t T
"":'*Qyk0R#RT^_ %T+]^` _f +FJJv,>+?@"))+ZZ($56"4)HI)$0VW
 _ 	 `  $!$(GH%d,UV"4)HI
 	
`s   A*C%rW   Nr  rW   r^   r[   r	  r	  j  s@    GoJVNL5./
  
 
F
r^   r	  )rd   rg   commonr   utilsr   r   r   r	   r
   r   r   utils.traversalr   r  r   r   r   r	  rW   r^   r[   <module>r     s_      !   + L
d
] d
N4
 4
n6
= 6
r&
= &
r^   