o
    i                     @   s4  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mZmZm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G dd de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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   )	HTTPError)
ExtractorErrordetermine_extint_or_noneparse_durationparse_iso8601str_or_nonetry_getupdate_url_queryurl_or_noneurljoinc                   @   s0   e Zd ZdgZdZdd Zdd Zdd	d
ZdS )	NRKBaseIENOz(?x)://
        (?:
            nrkod\d{1,2}-httpcache0-47115-cacheod0\.dna\.ip-only\.net/47115-cacheod0|
            nrk-od-no\.telenorcdn\.net|
            minicdn-od\.nrk\.no/od/nrkhd-osl-rr\.netwerk\.no/no
        )/c              	   C   s   t |g dd}td|r| ||S tdd|}| j||dddd	}|sDt| j|rD| jt| jd
t	dd ||dddd	}|S )Nr   )adapsz https?://[^/]+\.akamaihd\.net/i/z'(?:bw_(?:low|high)=\d+|no_audio_only)&? mp4m3u8_nativeFfatalz ://nrk-od-%02d.akamaized.net/no/c   )
r   rematch_extract_akamai_formatssub_extract_m3u8_formatssearch_CDN_REPL_REGEXrandomrandint)self	asset_urlvideo_idformats r'   H/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/nrk.py_extract_nrk_formats   s    
zNRKBaseIE._extract_nrk_formatsc                 C   sx   ddddd}| dd}d|v st|d	d
 du r%| j| d| jd | dp/| ||}t| j d| dd)Nu/   Du kan dessverre ikke se eller høre programmetu   Programmet har gått utzIkke tilgjengeliguC   NRK har ikke rettigheter til å vise dette programmet utenfor Norge)ProgramRightsAreNotReadyProgramRightsHasExpiredNoProgramRightsProgramIsGeoBlockedmessageTyper   IsGeoBlockedc                 S      | d d S )NusageRightsisGeoBlockedr'   xr'   r'   r(   <lambda>9       z(NRKBaseIE._raise_error.<locals>.<lambda>Tr-   )msg	countriesendUserMessagez said: )expected)getr   raise_geo_restricted_GEO_COUNTRIESr   IE_NAME)r#   dataMESSAGESmessage_typemessager'   r'   r(   _raise_error0   s   zNRKBaseIE._raise_errorNTc                 C   s,   | j td|||pd| d||ddidS )Nzhttps://psapi.nrk.no/Downloading z JSONAcceptzOapplication/vnd.nrk.psapi+json; version=9; player=tv-player; device=player-core)r   queryheaders)_download_jsonr   )r#   pathr%   itemnoter   rF   r'   r'   r(   	_call_api@   s   zNRKBaseIE._call_api)NNTN)__name__
__module____qualname__r=   r    r)   rC   rL   r'   r'   r'   r(   r      s    r   c                   @   s   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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gZd(d) Zd*S )+NRKIEa  (?x)
                        (?:
                            nrk:|
                            https?://
                                (?:
                                    (?:www\.)?nrk\.no/video/(?:PS\*|[^_]+_)|
                                    v8[-.]psapi\.nrk\.no/mediaelement/
                                )
                            )
                            (?P<id>[^?\#&]+)
                        z!http://www.nrk.no/video/PS*150533 2b88a652ad2e275591e61cf550887eec150533r   z"Dompap og andre fugler i Piip-Showz$md5:d9261ba34c43b61c812cb6b0269a5c8fi  20140325zre:^https?://gfx\.nrk\.no/.*$i{1S)	idexttitledescriptiondurationupload_date	thumbnail	timestamp	alt_titleurlmd5	info_dictz!http://www.nrk.no/video/PS*154915154915u)   Slik høres internett ut når du er blindz$md5:a621f5cc1bd75c8d5104cb048c6b8568   i}WZSuc   Cathrine Lie Wathne er blind, og bruker hurtigtaster for å navigere seg rundt på ulike nettsider.z?https://gfx.nrk.no/urxQMSXF-WnbfjBH5ke2igLGyN27EdJVWZ6FOsEAclhA20140425)	rT   rU   rV   rW   rX   r[   r\   rZ   rY   )r^   r`   z(nrk:ecc1b952-96dc-4a98-81b9-5296dc7a98d9Tr^   only_matchingz-nrk:clip/7707d5a3-ebe7-434a-87d5-a3ebe7a34a70zIhttps://v8-psapi.nrk.no/mediaelement/ecc1b952-96dc-4a98-81b9-5296dc7a98d9zBhttps://www.nrk.no/video/dompap-og-andre-fugler-i-piip-show_150533zehttps://www.nrk.no/video/humor/kommentatorboksen-reiser-til-sjos_d1fda11f-a4ad-437a-a374-0398bc84e999z*nrk:l_96f4f1b0-de54-4e6a-b4f1-b0de54fe6af8z2nrk:podcast/l_96f4f1b0-de54-4e6a-b4f1-b0de54fe6af8z
nrk:150533znrk:clip/150533znrk:MDDP12000117znrk:program/ENRK10100318znrk:nrk1znrk:channel/nrk1c           "         s    |dd d@ fdd	}|dddi}t|dd	 tp"|d
dkr1 |d  |d }g }|d D ]B}t|tsCq;|drIq;t|d}|sSq;|dpYd	 }|dksft
|dkrp| | q;|dkr}|||dd q;|d}	|	d }
|
d }|d }|d}t|
dd	 }t|dpt|	d}g }t|
dd	 tpg D ]%}t|tsqt|d}|sq||t|dt|d d! qi }t|d"d	 tpg D ]8}t|tsqt|d#}|sqt|d$pd%}t|d&}|r|d'| 7 }||g d|i qt|	d(d	 t}d }|r=|d)kr4d*}n	| r=t|}t|	d+d	 d,k}||||||||tt|d-d	 td.
}|rd  } } } }}  jd/ d0d1d2}!|!rt|!trt|!d3}t|!d4}t|!d5}t|!d6}t|!d7} |s|}|r|d8| 7 }|st jd9|pdd:d d;}|s|r|nd }| st jd<|pdd=d d;} | st jd>|pdd=d d;} ||||||| d? |S )AN/c              
      s~   z j d|  d | |dW S  ty> } z"t|jtr9|jjdkr9 j d|  d | |dW  Y d }~S  d }~ww )Nz	playback/z	/program/rF   i  rf   )rL   r   
isinstancecauser   status)rJ   rF   er#   r%   r'   r(   call_playback_api   s    *z.NRKIE._real_extract.<locals>.call_playback_apimanifestpreferredCdnakamaic                 S      | d S )NrT   r'   r3   r'   r'   r(   r5          z%NRKIE._real_extract.<locals>.<lambda>playabilitynonPlayableplayableassets	encryptedr^   formatr   hlsm3u8mp3none)r^   	format_idvcodecmetadatapreplaytitlesrV   subtitlec                 S   s   | d  ddS )NrW   
)replacer3   r'   r'   r(   r5          rX   c                 S   r0   )Nposterimagesr'   r3   r'   r'   r(   r5      r6   
pixelWidthpixelHeight)r^   widthheightc                 S   rr   )N	subtitlesr'   r3   r'   r'   r(   r5      rs   webVttlanguagenbtype-c                 S   s   | d d d d S )NlegalAgebodyratingcoder'   r3   r'   r'   r(   r5      s    Ar   c                 S      | d d d S )N_linksseriesnamer'   r3   r'   r'   r(   r5      r   r   c                 S   r   )NavailabilityonDemandfromr'   r3   r'   r'   r(   r5     r   )
rT   rV   r\   rW   rX   
thumbnails	age_limitr&   r   r[   z	programs/programsFr   seriesTitleseasonIdseasonNumberepisodeTitleepisodeNumberz - zSesong\s+(\d+)zseason number)defaultz^(\d+)\.zepisode numberz\((\d+)\s*:\s*\d+\))rV   r   	season_idseason_numberepisodeepisode_numberN)	_match_idsplitr   strr;   rC   ri   dictr   lowerr   extendr)   appendr	   listr   r   
setdefaultisdigitr
   rL   _search_regexupdate)"r#   r^   rn   ro   rv   r&   asset
format_urlasset_formatr?   r   r   rV   r\   rW   rX   r   image	image_urlr   r   sub_urlsub_keysub_type	legal_ager   	is_seriesinfor   r   r   r   r   r   r'   rm   r(   _real_extract   s   	










	zNRKIE._real_extractNrM   rN   rO   
_VALID_URL_TESTSr   r'   r'   r'   r(   rP   J   s    KrP   c                   @   s  e Zd ZdZdZde Zdddddd	d
dddigddigddddd	dddi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+d,d-d.d/d0d1d2d3d4d5d6d7dd8d9d:d;d<d&d=ddid>d?d@ddAdBd&dCddidDgdEdFdGd@ddAdBd&dCdDgdHdIdJdKddLdMdNdOdPd4dQd&dR
ddid>dSdTddUdVdWdXdYd&d=ddidZd[d\dd]d^dd]d_dd]g
Zd`da ZdbS )cNRKTVIEzNRK TV and NRK Radioz(?P<id>[a-zA-Z]{4}\d{8})z4https?://(?:tv|radio)\.nrk(?:super)?\.no/(?:[^/]+/)*z&https://tv.nrk.no/program/MDDP12000117 c4a5960f1b00b40d47db65c1064e0ab1MDDP12000117r   zAlarm Trolltungaz$md5:46923a6e6510eefcce23d5ef2a58f2ceg{G^@   rU   vtt)znb-norznb-ttv20170627iNRYz?https://gfx.nrk.no/myRSc4vuFlahB60P3n6swwRTQUZI1LqJZl9B7icZFgzA)rT   rU   rV   rW   rX   r   r   rY   r[   rZ   r\   skip_downloadT)r^   r_   r`   paramsz@https://tv.nrk.no/serie/20-spoersmaal-tv/MUHH48000314/23-05-2014 8d40dab61cea8ab0114e090b029a0565rT   MUHH48000314rV   u   20 spørsmål - 23. mai 2014r\   z23. mai 2014rW   $md5:bdea103bc35494c143c6a9acdd84887arX     r      20 spørsmålr   r   r   r[   i$r^rZ   z?https://gfx.nrk.no/u7uCe79SEfPVGRAGVp2_uAZnNc4mfz_kjXg6Bgek8lMQr   126936rY   20200319seasonzSeason 2014r   i  r      r]   z&https://tv.nrk.no/program/mdfp15000514MDFP15000514uB   Kunnskapskanalen - Grunnlovsjubiléet - Stor ståhei for ingentingz$md5:89290c5ccde1b3a24bb8050ab67fe1dbgGz@Kunnskapskanalenu/   Grunnlovsjubiléet - Stor ståhei for ingenting)rT   rU   rV   rW   rX   r   r   r   )r^   r`   r   zAhttps://tv.nrk.no/serie/tour-de-ski/MSPO40010515/06-01-2015#del=2MSPO40010515z.Sprint fri teknikk, kvinner og menn 06.01.2015z$md5:c03aba1e917561eface5214020551b7a)rT   rU   rV   rW   r   z#Failed to download m3u8 informationz*particular part is not supported currently)r^   r`   r   expected_warningsskipz;https://tv.nrk.no/serie/tour-de-ski/MSPO40010515/06-01-2015zIkke tilgjengelig utenfor Norge)r^   r`   r   r   z=https://tv.nrk.no/serie/anno/KMTE50001317/sesong-3/episode-13KMTE50001317zAnno - 13. episodez$md5:11d9613661a8dbe6f9bef54e3a4cbbfai$	  Annoz13. episode   )
rT   rU   rV   rW   rX   r   r   r   r   r   z=https://tv.nrk.no/serie/nytt-paa-nytt/MUHH46000317/27-01-2017MUHH46000317u   Nytt på Nytt 27.01.2017z$md5:5358d6388fba0ea6f0b6d11c48b9eb4bi  u   Nytt på nyttz
27.01.2017r+   r^   r`   r   r   z<https://radio.nrk.no/serie/dagsnytt/NPUB21019315/12-07-2015#rd   z:https://tv.nrk.no/serie/lindmo/2018/MUHU11006318/avspillerz>https://radio.nrk.no/serie/dagsnytt/sesong/201507/NPUB21019315c                 C   $   |  |}| jd| t |dS Nnrk:ier%   r   
url_resultrP   ie_keyr#   r^   r%   r'   r'   r(   r        
zNRKTVIE._real_extractN)rM   rN   rO   IE_DESC_EPISODE_REr   r   r   r'   r'   r'   r(   r   2  s   
	
 r   c                   @   sn   e Zd ZdZde g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iddgZdd ZdS )NRKTVEpisodeIEzhhttps?://tv\.nrk\.no/serie/(?P<id>[^/?#]+/sesong/(?P<season_number>\d+)/episode/(?P<episode_number>\d+))z6https://tv.nrk.no/serie/hellums-kro/sesong/1/episode/2MUHH36005220r   u)   Hellums kro - 2. Kro, krig og kjærlighetz$md5:ad92ddffc04cea8ce14b415deef81787gHzo@zHellums kror   r   u   2. Kro, krig og kjærlighetr   )
rT   rU   rV   rW   rX   r   r   r   r   r   r   T)r^   add_ier`   r   z4https://tv.nrk.no/serie/backstage/sesong/1/episode/8MSUI14000816zBackstage - 8. episodez$md5:de6ca5d5a2d56849e4021f2bf2850df4i(  	Backstage   z
8. episoder   r+   r   c                 C   s   |  |ddd\}}}| ||\}}t|jr"t|j}n| d|d|d d }t	tj
|s9td| jd	| t|t|t|d
S )NrT   r   r   z#<script\b[^>]+\bid="pageData"[^>]*>z	page datainitialStateselectedEpisodePrfIdzUnable to extract NRK IDr   )r   r   )_match_valid_urlgroup_download_webpage_handler   suitabler^   r   _search_jsonr   	fullmatchr   r   r   rP   int)r#   r^   
display_idr   r   webpageurlhnrk_idr'   r'   r(   r     s*   

zNRKTVEpisodeIE._real_extractN)rM   rN   rO   r   rP   r   r   r   r'   r'   r'   r(   r     sH    &r   c                   @   s4   e Zd Zdd ZdZdd Zedd Zdd	 Zd
S )NRKTVSerieBaseIEc                 C   sd   t |tsg S g }|D ]$}|dp|d}|rt |tsq|| jd| t |d q|S )NprfId	episodeIdr   r   )ri   r   r;   r   r   r   rP   r   )r#   
entry_listentriesr   r  r'   r'   r(   _extract_entries  s   

z!NRKTVSerieBaseIE._extract_entries)episodesinstalmentsc                 C   s"   | j D ]}||r|  S qd S r   )_ASSETS_KEYSr;   )r#   embedded	asset_keyr'   r'   r(   _extract_assets_key  s
   

z$NRKTVSerieBaseIE._extract_assets_keyc                 C   s   | dv rdS dS )N)podcastpodkastr  r   r'   )
serie_kindr'   r'   r(   _catalog_name  s   zNRKTVSerieBaseIE._catalog_namec                 #   s    t dD ]Z}|dp|}t|ts d S | |  s! d S t| fdd fddft}| |E d H  t|dd  fddft	}|sL d S | j
||d  d	| d
d}|s` d S qd S )Nr   	_embeddedc                    s   |   d   S )Nr  r'   r3   
assets_keyr'   r(   r5     r   z+NRKTVSerieBaseIE._entries.<locals>.<lambda>c                    s   |   S r   r'   r3   r  r'   r(   r5      rs   c                 S   r   )Nr   nexthrefr'   r3   r'   r'   r(   r5   &  r   c                    s   | d   d d d S )Nr  r   r  r  r'   r3   r  r'   r(   r5   '  s    rD   z JSON page F)rK   r   )	itertoolscountr;   ri   r   r  r   r   r  r   rL   )r#   r?   r   page_numr  r  next_url_pathr'   r  r(   _entries  sD   




zNRKTVSerieBaseIE._entriesN)	rM   rN   rO   r  r  r  staticmethodr  r  r'   r'   r'   r(   r    s    
r  c                	       s   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ddddgZe fddZdd Z  ZS )NRKTVSeasonIEas  (?x)
                    https?://
                        (?P<domain>tv|radio)\.nrk\.no/
                        (?P<serie_kind>serie|pod[ck]ast)/
                        (?P<serie>[^/]+)/
                        (?:
                            (?:sesong/)?(?P<id>\d+)|
                            sesong/(?P<id_2>[^/?#&]+)
                        )
                    z*https://tv.nrk.no/serie/backstage/sesong/1zbackstage/1zSesong 1rT   rV      r^   r`   playlist_mincountz#https://tv.nrk.no/serie/lindmo/2016zlindmo/20162016   z7https://radio.nrk.no/serie/dickie-dick-dickens/sesong/1zdickie-dick-dickens/1   z1https://radio.nrk.no/serie/dagsnytt/sesong/201509zdagsnytt/201509zSeptember 2015iI  z(https://tv.nrk.no/serie/spangas/sesong/1Trd   zEhttps://radio.nrk.no/podkast/hele_historien/sesong/diagnose-kverulantz!hele_historien/diagnose-kverulantzDiagnose kverulantr   z9https://radio.nrk.no/podkast/loerdagsraadet/sesong/202101c                    s.   t |st|st|rdS t |S )NF)r   r   r   NRKRadioPodkastIEsuperclsr^   	__class__r'   r(   r   m  s   "
zNRKTVSeasonIE.suitablec           
      C   s   |  |}|d}|d}|d}|dp|d}| d| }| j| d| | d| d| |d	d
did}t|dd tpG|}	| | ||||	S )Ndomainr  serierT   id_2rf   	/catalog/z	/seasons/r   pageSize2   rh   c                 S   r0   )Nr   rV   r'   r3   r'   r'   r(   r5   ~  r6   z-NRKTVSeasonIE._real_extract.<locals>.<lambda>)r   r   rL   r  r   r   playlist_resultr  )
r#   r^   mobjr,  r  r-  r   r   r?   rV   r'   r'   r(   r   r  s   





zNRKTVSeasonIE._real_extract	rM   rN   rO   r   r   classmethodr   r   __classcell__r'   r'   r*  r(   r  3  sT    	


/r  c                       s   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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gZe fd)d*Zd+d, Z  ZS )-NRKTVSeriesIEzkhttps?://(?P<domain>(?:tv|radio)\.nrk|(?:tv\.)?nrksuper)\.no/(?P<serie_kind>serie|pod[ck]ast)/(?P<id>[^/]+)z$https://tv.nrk.no/serie/groenn-gledezgroenn-gledeu   Grønn gledez$md5:7576e92ae7f65da6993cf90ee29e4608rT   rV   rW   Z   r!  zhttps://tv.nrk.no/serie/lindmoTrd   zhttps://tv.nrk.no/serie/blankblankBlankz$md5:7664b4e7e77dc6810cd3bca367c25b6er   z!https://tv.nrk.no/serie/backstage	backstager   z$md5:63692ceb96813d9a207e9910483d948b<   z%https://tv.nrksuper.no/serie/labyrintlabyrintLabyrintu`   I Daidalos sin undersjøiske Labyrint venter spennende oppgaver, skumle robotskapninger og slim.r   z9https://tv.nrk.no/serie/broedrene-dal-og-spektralsteinenez-https://tv.nrk.no/serie/saving-the-human-racez$https://tv.nrk.no/serie/postmann-patz.https://radio.nrk.no/serie/dickie-dick-dickenszdickie-dick-dickenszDickie Dick Dickensz$md5:19e67411ffe57f7dce08a943d7a0b91fr   z"https://nrksuper.no/serie/labyrintz-https://radio.nrk.no/podkast/ulrikkes_universrT   ulrikkes_univers
   zXhttps://radio.nrk.no/podkast/ulrikkes_univers/nrkno-poddkast-26588-134079-05042018030000c                    s.   t  fddttttfD rdS t  S )Nc                 3   s    | ]}|  V  qd S r   )r   ).0r   r^   r'   r(   	<genexpr>  s    z)NRKTVSeriesIE.suitable.<locals>.<genexpr>F)anyr   r   r&  r  r'  r   r(  r*  rC  r(   r     s   


zNRKTVSeriesIE.suitablec              	   C   s  |  | \}}}|dk}|rdnd}|rdnd}| j| d| | d| |d|d	 d
id}t|dd dd dd gpAi }	g }
|
| || |dpSi }t|dd p\g }|dpcg }t|t|kr|D ]5}t	||d}|s|d}|rt
|trd| d| d| }|r|
| j|t |dd qnn|D ]}|
| || q|
| |dpi | | |
||	d|	dS )Nz	radio.nrkradiotvpembeddedInstalmentsPr/  rf   r-  ageSizer1  rh   c                 S   rr   )Nr   r'   r3   r'   r'   r(   r5     rs   z-NRKTVSeriesIE._real_extract.<locals>.<lambda>c                 S      | | d  d S )Nr   r   r'   r3   r'   r'   r(   r5     r   c                 S   rK  )N
seriesTyper   r'   r3   r'   r'   r(   r5     r   r  c                 S   r0   )Nr   seasonsr'   r3   r'   r'   r(   r5     r6   rM  r  r   zhttps://z.nrk.no/serie/z/sesong/rV   )r   video_titleextraMaterialr   )r   groupsrL   r  r   r   r  r;   lenr   ri   r   r   r   r  r   r2  )r#   r^   siter  	series_idis_radior,  size_prefixr   r   r  r  linked_seasonsembedded_seasonsr   
season_urlseason_namer'   r'   r(   r     sT   
zNRKTVSeriesIE._real_extractr4  r'   r'   r*  r(   r7    s    

	Fr7  c                   @   s(   e Zd ZdZdZddddddgZdS )NRKTVDirekteIEz$NRK TV Direkte and NRK Radio Direktez7https?://(?:tv|radio)\.nrk\.no/direkte/(?P<id>[^/?#&]+)zhttps://tv.nrk.no/direkte/nrk1Trd   z-https://radio.nrk.no/direkte/p1_oslo_akershusN)rM   rN   rO   r   r   r   r'   r'   r'   r(   rZ    s    rZ  c                
   @   sN   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gZdd ZdS )r&  zohttps?://radio\.nrk\.no/pod[ck]ast/(?:[^/]+/)+(?P<id>l_[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12})zThttps://radio.nrk.no/podkast/ulrikkes_univers/l_96f4f1b0-de54-4e6a-b4f1-b0de54fe6af8r   MUHH48000314AAr   u   20 spørsmål 23.05.2014r   r   r   z
23.05.2014)rT   rU   rV   rW   rX   r   r   r]   zThttps://radio.nrk.no/podcast/ulrikkes_univers/l_96f4f1b0-de54-4e6a-b4f1-b0de54fe6af8Trd   z]https://radio.nrk.no/podkast/ulrikkes_univers/sesong/1/l_96f4f1b0-de54-4e6a-b4f1-b0de54fe6af8zlhttps://radio.nrk.no/podkast/hele_historien/sesong/bortfoert-i-bergen/l_774d1a2c-7aa7-4965-8d1a-2c7aa7d9652cc                 C   r   r   r   r   r'   r'   r(   r   #  r   zNRKRadioPodkastIE._real_extractNr   r'   r'   r'   r(   r&  	  s0    r&  c                   @   s   e Zd Zdd Zdd ZdS )NRKPlaylistBaseIEc                 C   s   d S r   r'   r#   r   r'   r'   r(   _extract_description*  s   z&NRKPlaylistBaseIE._extract_descriptionc                    sV     |} ||} fddt j|D } |} |} ||||S )Nc                    s"   g | ]}  d | t qS )r   )r   rP   r   )rB  r%   r#   r'   r(   
<listcomp>2  s    z3NRKPlaylistBaseIE._real_extract.<locals>.<listcomp>)r   _download_webpager   findall_ITEM_RE_extract_titler^  r2  )r#   r^   playlist_idr   r  playlist_titleplaylist_descriptionr'   r_  r(   r   -  s   



zNRKPlaylistBaseIE._real_extractN)rM   rN   rO   r^  r   r'   r'   r'   r(   r\  )  s    r\  c                   @   sL   e Zd ZdZdZddddddd	d
dddddd	gZdd Zdd ZdS )NRKPlaylistIEzBhttps?://(?:www\.)?nrk\.no/(?!video|skole)(?:[^/]+/)+(?P<id>[^/]+)z6class="[^"]*\brich\b[^"]*"[^>]+data-video-id="([^"]+)"zLhttp://www.nrk.no/troms/gjenopplev-den-historiske-solformorkelsen-1.12270763z4gjenopplev-den-historiske-solformorkelsen-1.12270763u*   Gjenopplev den historiske solformørkelsenz$md5:c2df8ea3bac5654a26fc2834a542feedr8  r   r^   r`   playlist_countzGhttp://www.nrk.no/kultur/bok/rivertonprisen-til-karin-fossum-1.12266449z*rivertonprisen-til-karin-fossum-1.12266449zRivertonprisen til Karin Fossumu<   Første kvinne på 15 år til å vinne krimlitteraturprisen.c                 C   s   | j |ddS )NFr   )_og_search_titler]  r'   r'   r(   rd  S  s   zNRKPlaylistIE._extract_titlec                 C   s
   |  |S r   )_og_search_descriptionr]  r'   r'   r(   r^  V  s   
z"NRKPlaylistIE._extract_descriptionN)rM   rN   rO   r   rc  r   rd  r^  r'   r'   r'   r(   rh  >  s(    	rh  c                   @   s8   e Zd ZdZdej ZddddddgZd	d
 ZdS )NRKTVEpisodesIEz:https?://tv\.nrk\.no/program/[Ee]pisodes/[^/]+/(?P<id>\d+)zdata-episode=["\']z6https://tv.nrk.no/program/episodes/nytt-paa-nytt/6903169031u   Nytt på nytt, sesong: 201210r     ri  c                 C   s   | j d|dddS )Nz<h1>([^<]+)</h1>rV   Fr   )_html_search_regexr]  r'   r'   r(   rd  f  s   zNRKTVEpisodesIE._extract_titleN)	rM   rN   rO   r   r   r   rc  r   rd  r'   r'   r'   r(   rm  Z  s    	rm  c                   @   s>   e Zd ZdZdZddddddd	d
ddddgZdd ZdS )
NRKSkoleIEz	NRK Skolez;https?://(?:www\.)?nrk\.no/skole/?\?.*\bmediaId=(?P<id>\d+)z6https://www.nrk.no/skole/?page=search&q=&mediaId=14099 18c12c3d071953c3bf8d54ef6b2587b76021r   zGenetikk og eneggede tvillingerz$md5:3aca25dcf38ec30f0363428d2b265f8di  )rT   rU   rV   rW   rX   r]   zYhttps://www.nrk.no/skole/?page=objectives&subject=naturfag&objective=K15114&mediaId=19355Trd   c                 C   s0   |  |}| d| |d }| d| S )Nz5https://nrkno-skole-prod.kube.nrk.no/skole/api/media/psIdr   )r   rH   r   )r#   r^   r%   r  r'   r'   r(   r   ~  s   
zNRKSkoleIE._real_extractN)rM   rN   rO   r   r   r   r   r'   r'   r'   r(   rq  k  s"    rq  )r  r!   r   commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   r   r   rP   r   r   r  r  r7  rZ  r&  r\  rh  rm  rq  r'   r'   r'   r(   <module>   s*    05 i <7Qx 