
    VGh>                         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 ddlmZ dZ G d d	e      Z G d
 de      Z G d de      Z G d de      Zy)    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                   L   e Zd ZdZdZdgZdZddddd	d
ddddddddddddg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(dd(d/d0d1d2id3d4i d5d6d7dd8dd9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdId:dJd/dKdLdMdDdNdOdPdQd1dRid3dSd2dTdUd2dTdVd2dTgZdWdXdYdZZd[Z	d\ Z
d] Zy[)^DRTVIEaF  (?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 Selvr2   20230807r   z$md5:2da9060524fed707810d71080b3d0cd8r   i  r   zSpise med Pricer1   i@Mdr!   397440r"   r3   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                 @   | j                   ry | j                  dd dddiddddt        j                  t	        t        j                               d	gd
d      j                               }t        |d dt        hfd      | _         | j                   st        d      y )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                     |d   dk(  S )NtypeUserAccount _xs     ^/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/drtv.py<lambda>z)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     rZ   _real_initializezDRTVIE._real_initialize   s    ;;,,H$. 29 *(. JJ

-$+   vx -  #DgPSuU_df{{ !@AA r\   c                    | j                  |      }| j                  ||      }| j                  d|d|d      xs i }t        |ddddd	t        hfd
      rj                  d      }n6|j                  dd      d   }| j                  d| |dddddddddd      t        fd      xs |}| j                  d| d|dddddd dd!d"d#| j                   i$      }g }i }	t        |d%       D ]%  }
|
j                  d&d'      }|
j                  d(      }d }d)}|d*v rd}|d+| z  }d+| }n|d,k(  rd}| j                  |
j                  d-      |d.||d/      \  }}|j                  |       t        |
d0d1 t        hf      }|s| j                  ||	2       |D ]w  }|j                  d3      xs d}|	j                  | j                  j                  ||      |z   g       j                  |d4   t!        |j                  d&            xs d5d6       y ( |s(t        d7      r| j#                  | j$                  8       |||	d9t        d:d;d<d=d>d?t&        hfd@t(        hfdAdBdCdDt(        hfdEdFdGt(        hfdHt(        hfdI      S )JNzwindow\.__data\s*=rR   F)fatalcachepage.)N)entriesr   itemr^   r   rX   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)rH   expandffgeoLocationisDeviceAbroadrI   segmentssub)rO   rQ   c                  4     d   j                  dd      d   S )NcustomId:r   rq   )rsplit)rp   s   rZ   r[   z&DRTVIE._real_extract.<locals>.<lambda>   s    D$4$;$;C$CB$G r\   z4https://production.dr-massive.com/api/account/items/z/videoszDownloading stream datastreamzHD-1080)deliveryrH   rx   rI   
resolutionr|   authorizationzBearer )rO   rQ   rP   c                     |d   S )Nr%   rV   rW   s     rZ   r[   z&DRTVIE._real_extract.<locals>.<lambda>   s
    ah r\   formatnaaccessService )SpokenSubtitlesSignLanguageVisuallyInterpreted-StandardVideor%   r   )r   
preferencem3u8_idrl   r<   c                     t        |d         S )Nlink)r   )rX   vs     rZ   r[   z&DRTVIE._real_extract.<locals>.<lambda>   s    KXYZ`XaLb r\   )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   r8   r   r3   r1   r   r   r   r    r!   r"   r#   r$   )	_match_id_download_webpage_search_jsonr   dictgetr   ra   r
   r`   #_extract_m3u8_formats_and_subtitlesextend_merge_subtitles
setdefaultSUBTITLE_LANGSappendr   raise_geo_restricted_GEO_COUNTRIESr	   r   )rh   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_trackrI   rp   s                       @rZ   _real_extractzDRTVIE._real_extract   sL   >>#&((h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H 	F

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

5!8:W`hm B oJD$NN4 (+?beidj1klM %%d9%=* 	 }}Z08D$$T%8%8%<%<T4%H?%Z\^_ff$V,'	h(?@IEh '	4 <.[\%%0C0C%D "
 4 .,4&46G-%Y'+75-"*N[M!J'(#2[M"B!. >" 	
 	
r\   )__name__
__module____qualname__
_VALID_URL_GEO_BYPASSr   IE_NAME_TESTSr   r`   rj   r   rV   r\   rZ   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                   8    e Zd ZdZdZdgZdddddd	d
idZd Zy)
DRTVLiveIEz	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   r4   Tr5   c                 z   | j                  |      }| j                  d|z   |      }|d   }g }|j                  dg       D ]  }|j                  d      }|s|j                  d      }|j                  dg       D ]  }	|	j                  dg       D ]  }
|
j                  d      }|st        | d	| d
di      }|dk(  r'|j	                  | j                  ||d|dd             V|dk(  s\|j	                  | j                  t        | d	| ddi      ||d                |||j                  d      |ddS )Nz,https://www.dr.dk/mu-online/api/1.0/channel/TitleStreamingServersServerLinkType	QualitiesStreamsStream/br   HLSr   FT)r   rl   liveHDShdcorez3.7.0)f4m_idrl   PrimaryImageUri)r   r   r3   r,   is_live)r   ra   r   r   r   _extract_m3u8_formats_extract_f4m_formats)rh   r%   
channel_idchannel_datar   r,   streaming_serverserver	link_typequalityr   stream_path
stream_urls                rZ   r   zDRTVLiveIE._real_extract  s   ^^C(
**:ZG W% , 0 01CR H 	H%))(3F(,,Z8I+//R@ H%kk)R8 HF"(**X"6K& !1!(!K=1C9">J E)t'A'A&
E$-U (B (G H #e+t'@'@AQ%ha}5'7JBL&y (A (G HHH	H, %))*;<
 	
r\   N)r   r   r   r   r   r   _TESTr   rV   r\   rZ   r   r      s<    GNJVN.L
 T
E#
r\   r   c            	       T    e Zd ZdZdZdgZddddddd	d
dddddddddd
ddgZd Zy)DRTVSeasonIEz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    r8      r%   r'   playlist_mincountz<https://www.dr.dk/drtv/saeson/frank-and-kastaniegaarden_87618761i  zSeason 2009   c                 .   | j                  |      j                  dd      \  }}| j                  t        d| d| z  |      }t	        |d      D cg c]  }dd|d    t
        j                         |j                  d	      |j                  d
      |j                  d      |j                  d      t	        |d      t	        |d      |j                  d      d
 }}d||t	        |d      t	        |d      t	        |d      |t	        |d      dS c c}w )Nr   r   z/saeson/rX   )ro   r   rp   episodesitemsr%   https://www.dr.dk/drtvpathr   r   r   shortDescriptionro   r   rp   r   ro   r   rp   r   r   )
_typer%   ie_keyr   r8   r"   r   r   r    r#   playlistro   r   rp   r   )r   r   r   r   r8   r   ro   r    )_match_valid_urlgroupra   
SERIES_APIr   r   r   r   )rh   r%   r   r!   rR   r"   ro   s          rZ   r   zDRTVSeasonIE._real_extractM  s0    $ 5 5c : @ @t T
I"":(:,a	{0S#SU_` &d,WXZ  +GFO+<=mmo[[) %67{{=1";;'9:"4)HI)$0VW%kk/:
 Z Z  $!$(GH%d,UV"4)HI)$0VW	
 		
Zs   BDNr   r   r   r   r   r   r   r   rV   r\   rZ   r   r   1  sj    GpJVNM5./!&
  N5./!&
  F0
r\   r   c                   :    e Zd ZdZdZdgZddddddd	d
dgZd Zy)DRTVSeriesIEz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   r8   r;   r   c                    | j                  |      j                  dd      \  }}| j                  t        d| d| z  |      }t	        |d      D cg c]b  }dd|j                  d       t        j                         |j                  d	      |j                  d
      t	        |d      t	        |d      dd }}d||t	        |d      t	        |d      t	        |d      |dS c c}w )Nr   r   z/serie/rX   )ro   r   rp   r   seasonsr   r%   r   r   r   r   r   r   )r   r%   r   r   r8   r   r    r   r   )r   r   r   r   r8   r   ro   )r   r   ra   r   r   r   r   r   )rh   r%   r   	series_idrR   r   ro   s          rZ   r   zDRTVSeriesIE._real_extractz  s    $ 5 5c : @ @t T
I"":'*Qyk0R#RT^_ %T+]^`  +FJJv,>+?@"))+ZZ($56"4)HI)$0VW
 ` `  $!$(GH%d,UV"4)HI
 	
`s   A'C#Nr   rV   r\   rZ   r   r   j  s@    GoJVNL5./
  
 
F
r\   r   )rb   re   commonr   utilsr   r   r   r	   r
   r   r   utils.traversalr   r   r   r   r   r   rV   r\   rZ   <module>r     s_      !   + L
d
] d
N4
 4
n6
= 6
r&
= &
r\   