U
    g>                     @   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                   @   s  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d4d5ddd6d7d8d9d:d;d<d=d6d/d>d;d?d@dAd1dBid3dCd2dDdEd2dDdFd2dDgZdGdHdIdJZdKZ	dLdM Z
dNdO ZdKS )PDRTVIEaF  (?x)
                    https?://
                        (?:
                            (?:www\.)?dr\.dk/tv/se(?:/ondemand)?/(?:[^/?#]+/)*|
                            (?:www\.)?(?:dr\.dk|dr-massive\.com)/drtv/(?:se|episode|program)/
                        )
                        (?P<id>[\da-z_-]+)
                    FDKZdrtvzIhttps://www.dr.dk/tv/se/boern/ultra/klassen-ultra/klassen-darlig-taber-10Z 25e659cccc9a2ed956110a299fdf5983zklassen-darlig-taber-10mp4u   Klassen - Dårlig taber (10)z$md5:815fe1b7fa656ed80580f31e8b3c79aai蕼[Z20181009gQ@Z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_dictZexpected_warningsskipzMhttps://www.dr.dk/tv/se/historien-om-danmark/-/historien-om-danmark-stenalderZ00831690010zHistorien om Danmark: Stenalderz$md5:8c66dcbc1669bbc6f873879880f37f2ai0/\Z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_71769Z00951930010Frank & Kastaniegaardenz$md5:974e1780934cf3275ef10280204bccb0ii.\Z20190103i
  Z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_397445Z00212301010zSpise med Price: Pasta Selvz1. Pasta SelvZ20230807z$md5:2da9060524fed707810d71080b3d0cd8i  zSpise med Pricei@MdZ397440   i  z
mincount:2)r   r   r   r   	alt_titler&   r   r   r   r%   r   r   r'   r   r   r   	subtitlesZm3u8z0https://www.dr.dk/drtv/episode/bonderoeven_71769)r   Zonly_matchingz0https://dr-massive.com/drtv/se/bonderoeven_71769z,https://www.dr.dk/drtv/program/jagten_220924daZ
da_foreignZda_combined)ZDanishLanguageSubtitlesZForeignLanguageSubtitlesZ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 srt	dd S )Nz:https://isl.dr-massive.com/api/authorization/anonymous-ssozDownloading anonymous tokenzcontent-typezapplication/jsonZphone_androidr.   true)devicelangZsupportFallbackTokenCatalogT)ZdeviceIdZscopesZoptout)noteheadersquerydatac                 S   s   |d dkS )NtypeZUserAccount _xr8   r8   9/tmp/pip-unpacked-wheel-q5ljy6pj/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uuidZuuid4encoder   r   )selfZtoken_responser8   r8   r<   _real_initialize   s4      

  zDRTVIE._real_initializec                    sn  |  |}| ||}| jd|d|ddp,i }t|ddddd	thfdd
  rZ d}n:|ddd }| jd| |ddddddddddd t fddp|}| 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+kr@d}|d,| 7 }d,| }n|d-krNd}| j
|
d.|d/||dd0\}}|| t|
d1d2d thf}|s| j||	d3 |D ]P}|d4pd}|	| j||| g |d5 t|d'pd6d7 qq|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*=r6   F)fatalcachepage.)N)entriesr   itemr@   r   r:   r   z0https://production-cdn.dr-massive.com/api/items/z'Attempting to download backup item dataZweb_browserallzidp,ldp,rptZdkfalser.   zdrtv,optedoutZ	Anonymous)r0   expandffZgeoLocationZisDeviceAbroadr1   segmentssub)r3   r5   c                      s    d  ddd S )NZcustomId:r   rP   )rsplitr8   rO   r8   r<   r=      r>   z&DRTVIE._real_extract.<locals>.<lambda>z4https://production.dr-massive.com/api/account/items/z/videoszDownloading stream datastreamzHD-1080)Zdeliveryr0   rT   r1   
resolutionrV   authorizationzBearer )r3   r5   r4   c                 S   s   |d S )Nr   r8   r9   r8   r8   r<   r=      r>   formatnaZaccessService )ZSpokenSubtitlesZSignLanguageZVisuallyInterpreted-ZStandardVideor   r   )r   
preferencem3u8_idrK   r-   c                 S   s   t |d S )Nlink)r   )r:   vr8   r8   r<   r=      r>   )targetlanguagerc   Zvtt)r   r   )r   customFieldsZIsGeoRestricted)Z	countries)r   r#   r-   r   contextualTitler   )ZimagesZ	wallpaperrg   ZBroadcastTimeDKr   )r   showr   )r   r   r   seasonNumberZseasonIdepisodeNameepisodeNumberZreleaseYear)r   r,   r   r'   r%   r   r   r   r   r   r   r   r   )	_match_idZ_download_webpageZ_search_jsonr   dictgetrX   rC   r	   rB   Z#_extract_m3u8_formats_and_subtitlesextendZ_merge_subtitles
setdefaultSUBTITLE_LANGSappendr   Zraise_geo_restricted_GEO_COUNTRIESr   r   )rI   r   Zurl_slugZwebpageZ	json_dataZitem_idZvideo_idZstream_datar#   r-   rZ   Z	format_idZaccess_servicera   Zsubtitle_suffixZfmtssubsZapi_subtitlesZ	sub_trackr1   r8   rY   r<   _real_extract   s    
       
 


     



zDRTVIE._real_extract)__name__
__module____qualname__
_VALID_URLZ_GEO_BYPASSrt   IE_NAME_TESTSrr   rB   rJ   rv   r8   r8   r8   r<   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/dr1Zdr1r   z5re:^DR1 [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$)r   r   r   r(   Tr)   c                 C   s  |  |}| d| |}|d }g }|dg D ]}|d}|sFq2|d}|dg D ]}	|	dg D ]}
|
d}|sqlt| d	| d
di}|dkr|| j||d|ddd ql|dkrl|| jt| d	| ddi||dd qlq\q2|||d|ddS )Nz,https://www.dr.dk/mu-online/api/1.0/channel/ZTitleZStreamingServersServerZLinkTypeZ	QualitiesZStreamsZStream/br_   ZHLSr   FT)rb   rK   ZliveZHDSZhdcorez3.7.0)Zf4m_idrK   ZPrimaryImageUri)r   r   r'   r#   Zis_live)rm   rC   ro   r
   rp   Z_extract_m3u8_formatsZ_extract_f4m_formats)rI   r   Z
channel_idZchannel_datar   r#   Zstreaming_serverserverZ	link_typeZqualityrZ   Zstream_pathZ
stream_urlr8   r8   r<   rv     sZ    



     

   zDRTVLiveIE._real_extractN)rw   rx   ry   r{   rz   rt   Z_TESTrv   r8   r8   r8   r<   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_9008Z9008frank-and-kastaniegaardenr$   i  zSeason 2008)r   
display_idr   r   r   r,      r   r!   Zplaylist_mincountz<https://www.dr.dk/drtv/saeson/frank-and-kastaniegaarden_8761Z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/r:   c                    s^   g | ]V}d d|d  t  |d|d|d|dt dt d|d	d

qS )r   https://www.dr.dk/drtvpathr   rh   rk   ZshortDescriptionrN   r   rO   r   rN   r   rO   rj   rl   )
_typer   ie_keyr   r,   r   r   r   r   r   )r   r   ro   r   ).0r   r6   r8   r<   
<listcomp>Q  s   z.DRTVSeasonIE._real_extract.<locals>.<listcomp>)rN   r   rO   Zepisodesitemsplaylistr   rN   r   rO   rh   r   )r   r   r   r   r,   r   rN   r   Z_match_valid_urlgrouprC   
SERIES_APIr   )rI   r   r   r   rN   r8   r   r<   rv   M  s    
zDRTVSeasonIE._real_extractNrw   rx   ry   r{   rz   rt   r|   rv   r8   r8   r8   r<   r   1  s2   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_6954Z6954r   r$   r_   )r   r   r   r   r,   r+   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/r:   c                    sH   g | ]@}d d| d t | d| dt dt ddqS )r   r   r   r   rh   r   r   )r   r   r   r   r,   r   r   )ro   r   r   r   )r   r   r   r8   r<   r   ~  s   z.DRTVSeriesIE._real_extract.<locals>.<listcomp>)rN   r   rO   ri   Zseasonsr   r   r   r   )r   r   r   r   r,   r   rN   r   )rI   r   r   Z	series_idrN   r8   r   r<   rv   z  s    
zDRTVSeriesIE._real_extractNr   r8   r8   r8   r<   r   j  s   r   )rD   rG   commonr   utilsr   r   r   r   r	   r
   r   Zutils.traversalr   r   r   r}   r   r   r8   r8   r8   r<   <module>   s   $	 h79