o
    i>                     @   s   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	 d	eZG d
d deZG dd deZG dd deZdS )    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                   @   sP  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\d] Z
d^d_ Zd[S )`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 Selvr0   20230807r   z$md5:2da9060524fed707810d71080b3d0cd8r   i  r   zSpise med Pricer/   i@Mdr   397440r    r1   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                 C   sv   | j rd S | jdd dddiddddttt d	gd
d d}t|dd dthfdd| _ | j s9t	dd S )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                 S   s   |d dkS )NtypeUserAccount _xrR   rR   I/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/drtv.py<lambda>       z)DRTVIE._real_initialize.<locals>.<lambda>valueFget_allzUnable to get anonymous token)
_TOKEN_download_jsonjsondumpsstruuiduuid4encoder   r   )selftoken_responserR   rR   rV   _real_initialize   s0   
zDRTVIE._real_initializec                    s`  |  |}| ||}| jd|d|ddpi }t|ddddd	thfdd
  r- d}n|ddd }| jd| |ddddddddddd t fddpS|}| jd| d|dd dddd!dd"d#d$| j	 id%}g }i }	t|d&d D ]{}
|
d'd(}|
d)}d }d*}|d+v rd}|d,| 7 }d,| }n|d-krd}| j
|
d.|d/||dd0\}}|| t|
d1d2d thf}|s| j||	d3 |D ]%}|d4pd}|	| j||| g |d5 t|d'pd6d7 qqz|st d8r| j| jd9 |||	d:t d;d<d=d>d?d@thfdAthfdBdCdDdEthfdFdGdHthfdIthfdJS )KNzwindow\.__data\s*=rO   F)fatalcachepage.)N)entriesr   itemrZ   r   rT   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)rE   expandffgeoLocationisDeviceAbroadrF   segmentssub)rL   rN   c                      s    d  ddd S )NcustomId:r   rl   )rsplitrR   rk   rR   rV   rW      s    z&DRTVIE._real_extract.<locals>.<lambda>z4https://production.dr-massive.com/api/account/items/z/videoszDownloading stream datastreamzHD-1080)deliveryrE   rs   rF   
resolutionrw   authorizationzBearer )rL   rN   rM   c                 S   s   |d S )Nr#   rR   rS   rR   rR   rV   rW      s    formatnaaccessService )SpokenSubtitlesSignLanguageVisuallyInterpreted-StandardVideor#   r   )r   
preferencem3u8_idrg   r:   c                 S   s   t |d S )Nlink)r   )rT   vrR   rR   rV   rW      rX   )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   r6   r   r1   r/   r   r   r   r   r   r    r!   r"   )	_match_id_download_webpage_search_jsonr   dictgetrz   r]   r	   r\   #_extract_m3u8_formats_and_subtitlesextend_merge_subtitles
setdefaultSUBTITLE_LANGSappendr   raise_geo_restricted_GEO_COUNTRIESr   r   )rd   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_trackrF   rR   r{   rV   _real_extract   s   








zDRTVIE._real_extract)__name__
__module____qualname__
_VALID_URL_GEO_BYPASSr   IE_NAME_TESTSr   r\   rf   r   rR   rR   rR   rV   r      s    	
cr   c                   @   s:   e Zd ZdZdZdgZdddddd	d
idZdd ZdS )
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   r2   Tr3   c                 C   s  |  |}| d| |}|d }g }|dg D ]b}|d}|s#q|d}|dg D ]L}	|	dg D ]C}
|
d}|s@q6t| d	| d
di}|dkr_|| j||d|ddd q6|dkry|| jt| d	| ddi||dd q6q.q|||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   rg   liveHDShdcorez3.7.0)f4m_idrg   PrimaryImageUri)r   r   r1   r*   is_live)r   r]   r   r
   r   _extract_m3u8_formats_extract_f4m_formats)rd   r#   
channel_idchannel_datar   r*   streaming_serverserver	link_typequalityr|   stream_path
stream_urlrR   rR   rV   r     sP   





zDRTVLiveIE._real_extractN)r   r   r   r   r   r   _TESTr   rR   rR   rR   rV   r      s    r   c                	   @   sV   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d ZdS )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   r6      r#   r%   playlist_mincountz<https://www.dr.dk/drtv/saeson/frank-and-kastaniegaarden_87618761i  zSeason 2009   c              
      sx   |  |dd\}}| td| d|  |  fddt dD }d||t d	t d
t d	|t ddS )Nr   r   z/saeson/rT   c                    s^   g | ]+}d d|d  t  |d|d|d|dt dt d|d	d

qS )r#   https://www.dr.dk/drtvpathr   r   r   shortDescriptionrj   r   rk   r   rj   r   rk   r   r   )
_typer#   ie_keyr   r6   r    r   r   r   r!   )r   r   r   r   ).0r    rO   rR   rV   
<listcomp>Q  s    
z.DRTVSeasonIE._real_extract.<locals>.<listcomp>)rj   r   rk   episodesitemsplaylistr   rj   r   rk   r   r   )r   r   r   r   r6   r   rj   r   _match_valid_urlgroupr]   
SERIES_APIr   )rd   r#   r   r   rj   rR   r   rV   r   M  s   
zDRTVSeasonIE._real_extractNr   r   r   r   r   r   r   r   rR   rR   rR   rV   r   1  s4    r   c                   @   s<   e Zd ZdZdZdgZddddddd	d
dgZdd ZdS )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   r6   r9   r   c                    sp   |  |dd\}}| td| d|  |  fddt dD }d||t d	t d
t d	|dS )Nr   r   z/serie/rT   c                    sH   g | ] }d d| d t | d| dt dt ddqS )r#   r   r   r   r   r   r   )r   r#   r   r   r6   r   r   )r   r   r   r   )r   r   r   rR   rV   r   ~  s    
z.DRTVSeriesIE._real_extract.<locals>.<listcomp>)rj   r   rk   r   seasonsr   r   r   r   )r   r   r   r   r6   r   rj   r   )rd   r#   r   	series_idrj   rR   r   rV   r   z  s   
zDRTVSeriesIE._real_extractNr   rR   rR   rR   rV   r   j  s    r   )r^   ra   commonr   utilsr   r   r   r   r	   r
   r   utils.traversalr   r   r   r   r   r   rR   rR   rR   rV   <module>   s    $	 h79