3
b`e                 @   s  d dl mZ d dlZddlmZ ddlmZmZ ddl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dS )     )unicode_literalsN   )InfoExtractor   )
compat_strcompat_urllib_parse_unquote)ExtractorErrorint_or_none
JSON_LD_RE
js_to_json
NO_DEFAULTparse_age_limitparse_durationtry_getc               @   s   e Zd ZdgZdZdd ZdS )	NRKBaseIENONc       ,   	      s  j |jrjfnj}x<|D ]4}jd|f d||dN kd}|sPq$|_P q$W |jdpv|jdpv|d |jdpg }|jd	pi }|jd
dkp|jddkp|jd  fdd}|jdottrfdd} xtdD ]\}	}
|
jd}|s qj|}|s6qj	| x.|D ]&}|jd}|rFd|krF|d= qFW ||	\}}t
|
jd}i }x<dOD ]4}|
jd| }|r|jdg jdt|i qW |j|
jdp||||||d qW |sF|jd}|rFj|}j	| t
|jd}|||dg}|sdd d!d"d#}|jd$d%}d&|krj|jd'jd( td)j|j||f dd*|jd+p|jd,}|jd-p|jd.}d }d }|jd
d/kr@|jd0i jd1p|jd2d%}d3d4g}tj||d5d d6d7}tj||d8d d9d7}d }|jd:}|rt|tr|jd;} t| trd<d= | D }|jd>}!|jd?i jd@}"|!|||||"r|"gnd t|jdA|dB}#|jdCdDkrdEnd }$x4|D ],}%|%j|# x|%dF D ]}|$|dG< qW qW |jdH}&t|&trg }'xt|&ddID ]\}(})t|)tsZqBt
|)jdJ}*|*d krvqBt
|(t|&kr|jdn|&|( jdJ}+|+d krqB|'j|*|+|)jddK qBW |'rt|dkr|'|dL dM< j||!S )PNzhttp://%s/mediaelement/%szDownloading mediaelement JSONr   )fatalZ	fullTitleZ	mainTitletitleidZconvivaStatisticsZmediaElementTypeLiveisLiveTc                s    rj | S | S )N)_live_title)t)liveself DC:\Users\Broad\Desktop\All-Down\binaries\youtube_dl\extractor\nrk.py
make_title4   s    z+NRKBaseIE._real_extract.<locals>.make_titleZmediaAssetsc                s,   t  dkrfS d| f d| f fS )Nr   z%s-%dz%s (Part %d))len)idx)media_assetsr   video_idr   r   video_id_and_title9   s    z3NRKBaseIE._real_extract.<locals>.video_id_and_titleurlextra_param_to_segment_urlhdcoredurationwebVtt	timedTextz%sSubtitlesUrlnoZ	carrierId)r   r   r&   	subtitlesformatsmediaUrl)r   r   r&   r+   u/   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)ZProgramRightsAreNotReadyProgramRightsHasExpiredNoProgramRightsProgramIsGeoBlockedZmessageType ZIsGeoBlockedr/   )msg	countriesz%s said: %s)expected
seriesNameseriesTitleZepisodeNameZepisodeNumberOrDateEpisodeZscoresStatisticsZspringStreamStreamZrelativeOriginUrlz*/s(?P<season>\d{,2})e(?P<episode>\d{,2})\.z6/sesong-(?P<season>\d{,2})/episode-(?P<episode>\d{,2})zseason numberseason)defaultgroupzepisode numberepisodeimagesZ	webImagesc             S   s:   g | ]2}|j d r|d  t|j dt|j ddqS )imageUrlwidthheight)r#   r=   r>   )getr	   ).0imager   r   r   
<listcomp>   s   z+NRKBaseIE._real_extract.<locals>.<listcomp>descriptionZmediaAnalyticscategoryZlegalAge)rC   seriesr:   season_numberepisode_number
categories	age_limit
thumbnails	mediaTypeAudiononer+   vcodecZshortIndexPoints)startZ
startPoint)
start_timeend_timer   r   chapters)r'   r(   )	_match_id	_api_host
_API_HOSTS_download_jsonr?   
isinstancelist	enumerate_extract_akamai_formats_sort_formatsr   
setdefaultappendr   raise_geo_restricted_GEO_COUNTRIESr   IE_NAMEr	   _search_regexdictr   updater   playlist_result),r   r#   Z	api_hostsZapi_hostdataentriesconvivar   r"   numasset	asset_urlr+   fZextra_paramentry_idZentry_titler&   r*   subtitlesubtitle_url	media_urlZMESSAGESZmessage_typerE   r:   rF   rG   Z_season_episodeZEPISODENUM_RErJ   r;   Z
web_imagesrC   rD   common_inforN   entryZpointsrR   next_numZpointrP   rQ   r   )r   r    r   r   r!   r   _real_extract   s   























zNRKBaseIE._real_extract)__name__
__module____qualname__r`   rU   rt   r   r   r   r   r      s   r   c               @   sZ   e Zd 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gZdS )NRKIEa  (?x)
                        (?:
                            nrk:|
                            https?://
                                (?:
                                    (?:www\.)?nrk\.no/video/PS\*|
                                    v8[-.]psapi\.nrk\.no/mediaelement/
                                )
                            )
                            (?P<id>[^?#&]+)
                        psapi.nrk.nov8-psapi.nrk.noz!http://www.nrk.no/video/PS*150533Z 706f34cdf1322577589e369e522b50efZ150533mp4z"Dompap og andre fugler i Piip-Showz$md5:d9261ba34c43b61c812cb6b0269a5c8fi  )r   extr   rC   r&   )r#   md5	info_dictz!http://www.nrk.no/video/PS*154915Z154915flvu)   Slik høres internett ut når du er blindz$md5:a621f5cc1bd75c8d5104cb048c6b8568   )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-5296dc7a98d9N)ry   rz   )ru   rv   rw   
_VALID_URLrV   _TESTSr   r   r   r   rx      s*   

rx   c               @   s2  e Zd ZdZdZde ZdRZ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(d)d*d"d#id+gd,d-d.d/d	d0d1d2d3d4dd"d#id5d6d	d7d1d8d3d4dd"d#id5gd9d:d1d;d+gd<d=d>d	d?d@dAdBdCdDdEdF	d"d#id$dGdHd	dIdJdKdLdMdd"d#id$dNd#dOdPd#dOg	ZdQS )SNRKTVIEzNRK TV and NRK Radioz(?P<id>[a-zA-Z]{4}\d{8})aP  (?x)
                        https?://
                            (?:tv|radio)\.nrk(?:super)?\.no/
                            (?:serie(?:/[^/]+){1,2}|program)/
                            (?![Ee]pisodes)%s
                            (?:/\d{2}-\d{2}-\d{4})?
                            (?:\#del=(?P<part_id>\d+))?
                    psapi-ne.nrk.nopsapi-we.nrk.noz&https://tv.nrk.no/program/MDDP12000117Z 8270824df46ec629b66aeaa5796b36fbZMDDP12000117AAr{   zAlarm Trolltungaz$md5:46923a6e6510eefcce23d5ef2a58f2cei     )r   r|   r   rC   r&   rI   )r#   r}   r~   z@https://tv.nrk.no/serie/20-spoersmaal-tv/MUHH48000314/23-05-2014Z 9a167e54d04671eb6317a37b7bc8a280ZMUHH48000314AAu   20 spørsmål 23.05.2014z$md5:bdea103bc35494c143c6a9acdd84887ai  u   20 spørsmålz
23.05.2014)r   r|   r   rC   r&   rE   r:   r.   )r#   r}   r~   skipz&https://tv.nrk.no/program/mdfp15000514ZMDFP15000514CAu:   Grunnlovsjubiléet - Stor ståhei for ingenting 24.05.2014z$md5:89290c5ccde1b3a24bb8050ab67fe1dbi  ZKunnskapskanalenz
24.05.2014skip_downloadT)r#   r~   paramszAhttps://tv.nrk.no/serie/tour-de-ski/MSPO40010515/06-01-2015#del=2zMSPO40010515-part2r   zETour de Ski: Sprint fri teknikk, kvinner og menn 06.01.2015 (del 2:2)z$md5:238b67b97a4ac7d7b4bf0edf8cc57d26)r   r|   r   rC   zVideo is geo restrictedz*particular part is not supported currently)r#   r~   r   expected_warningsr   z;https://tv.nrk.no/serie/tour-de-ski/MSPO40010515/06-01-2015ZMSPO40010515AHz7Sprint fri teknikk, kvinner og menn 06.01.2015 (Part 1)z$md5:1f97a41f05a9486ee00c56f35f82993di  zTour de Skiz
06.01.2015)r~   r   ZMSPO40010515BHz7Sprint fri teknikk, kvinner og menn 06.01.2015 (Part 2)i  ZMSPO40010515z.Sprint fri teknikk, kvinner og menn 06.01.2015)r   r   rC   )r#   playlistr~   r   z=https://tv.nrk.no/serie/anno/KMTE50001317/sesong-3/episode-13ZKMTE50001317AAz
Anno 13:30z$md5:11d9613661a8dbe6f9bef54e3a4cbbfai$	  ZAnnoz13:30      )	r   r|   r   rC   r&   rE   r:   rF   rG   z=https://tv.nrk.no/serie/nytt-paa-nytt/MUHH46000317/27-01-2017ZMUHH46000317AAu   Nytt på Nytt 27.01.2017z$md5:5358d6388fba0ea6f0b6d11c48b9eb4bi  u   Nytt på nyttz
27.01.2017z<https://radio.nrk.no/serie/dagsnytt/NPUB21019315/12-07-2015#)r#   r   z:https://tv.nrk.no/serie/lindmo/2018/MUHU11006318/avspillerN)r   r   )ru   rv   rw   IE_DESC_EPISODE_REr   rV   r   r   r   r   r   r      s   




r   c               @   sd   e Zd ZdZd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iddgZdd ZdS )NRKTVEpisodeIEz?https?://tv\.nrk\.no/serie/(?P<id>[^/]+/sesong/\d+/episode/\d+)z6https://tv.nrk.no/serie/hellums-kro/sesong/1/episode/2ZMUHH36005220BAr{   u   Kro, krig og kjærlighet 2:6z$md5:b32a7dc0b1ed27c8064f58b97bda4350i  zHellums kror   r   z2:6r   )
r   r|   r   rC   r&   rE   rF   rG   r:   rI   r   T)r#   r~   r   z4https://tv.nrk.no/serie/backstage/sesong/1/episode/8ZMSUI14000816AAzBackstage 8:30z$md5:de6ca5d5a2d56849e4021f2bf2850df4i(  	Backstage   z8:30)	r   r|   r   rC   r&   rE   rF   rG   r:   r-   )r#   r~   r   r   c             C   s^   | j |}| j||}| j| jt|ddd|d }tjtj|sFt	| j
d| tj |dS )NzJSON-LDjson_ld)r9   z@idznrk:%s)ier!   )rT   _download_webpage_parse_jsonrb   r
   rematchr   r   AssertionError
url_resultrx   ie_key)r   r#   
display_idwebpagenrk_idr   r   r   rt     s    

zNRKTVEpisodeIE._real_extractN)ru   rv   rw   r   r   rt   r   r   r   r   r     s4   

r   c               @   s.   e Zd ZdddZdd Zdd Zdd	 Zd
S )NRKTVSerieBaseIETc             C   sH   | j | jd|d|sdntd|dtd}|s0d S t|dd	 d
d	 ftS )N)INITIAL_DATA(?:_V\d)?_*\s*=\s*({.+?})\s*;&({.+?})\s*,\s*"[^"]+"\s*\)\s*</script>configz{})r8   F)r   transform_sourcec             S   s   | d d S )NinitialStaterE   r   )xr   r   r   <lambda>  s    z2NRKTVSerieBaseIE._extract_series.<locals>.<lambda>c             S   s   | d S )NrE   r   )r   r   r   r   r     s    )r   r   )r   rb   r   r   r   rc   )r   r   r   r   r   r   r   r   _extract_series  s     z NRKTVSerieBaseIE._extract_seriesc             C   s4   t |tsg S g }x|D ]}|j| j| qW |S )N)rX   rY   extend_extract_episodes)r   seasonsrg   r7   r   r   r   _extract_seasons  s    

z!NRKTVSerieBaseIE._extract_seasonsc             C   s   t |tsg S | j|jdS )Nepisodes)rX   rc   _extract_entriesr?   )r   r7   r   r   r   r     s    
z"NRKTVSerieBaseIE._extract_episodesc             C   s`   t |tsg S g }xH|D ]@}|jd}| st |t r:q|j| jd| tj |d qW |S )NZprfIdznrk:%s)r   r!   )rX   rY   r?   r   r^   r   rx   r   )r   Z
entry_listrg   r:   r   r   r   r   r     s    


z!NRKTVSerieBaseIE._extract_entriesN)T)ru   rv   rw   r   r   r   r   r   r   r   r   r     s   
r   c                   s>   e Zd ZdZddddddZe fdd	Zd
d Z  ZS )NRKTVSeasonIEz3https?://tv\.nrk\.no/serie/[^/]+/sesong/(?P<id>\d+)z*https://tv.nrk.no/serie/backstage/sesong/11zSesong 1)r   r      )r#   r~   playlist_mincountc                s(   t j|stj|rdS tt| j|S )NF)r   suitabler   superr   )clsr#   )	__class__r   r   r     s    zNRKTVSeasonIE.suitablec                s`   | j | | j| }| j| }t fdd|d D }t|dd t}| j| j| |S )Nc             3   s$   | ]}t  |jd kr|V  qdS )seasonNumberN)intr?   )r@   s)r   r   r   	<genexpr>  s    z.NRKTVSeasonIE._real_extract.<locals>.<genexpr>r   c             S   s   | d d S )Ntitlesr   r   )r   r   r   r   r     s    z-NRKTVSeasonIE._real_extract.<locals>.<lambda>)rT   r   r   nextr   r   re   r   )r   r#   r   rE   r7   r   r   )r   r   rt     s    
zNRKTVSeasonIE._real_extract)	ru   rv   rw   r   _TESTclassmethodr   rt   __classcell__r   r   )r   r   r     s   r   c            	       s   e Zd 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gZe fddZd d! Z  Z	S )"NRKTVSeriesIEz<https?://(?:tv|radio)\.nrk(?:super)?\.no/serie/(?P<id>[^/]+)z0(?:data-season=["\']|id=["\']season-)(?P<id>\d+)zhttps://tv.nrk.no/serie/blankZblankZBlankz$md5:7664b4e7e77dc6810cd3bca367c25b6e)r   r   rC   r   )r#   r~   r   z!https://tv.nrk.no/serie/backstageZ	backstager   z$md5:c3ec3a35736fca0f9e1207b5511143d3<   z$https://tv.nrk.no/serie/groenn-gledezgroenn-gledeu   Grønn gledez$md5:7576e92ae7f65da6993cf90ee29e4608
   z%https://tv.nrksuper.no/serie/labyrintZlabyrintZLabyrintz$md5:318b597330fdac5959247c9b69fdb1ecr   z9https://tv.nrk.no/serie/broedrene-dal-og-spektralsteineneT)r#   r   z-https://tv.nrk.no/serie/saving-the-human-racez$https://tv.nrk.no/serie/postmann-patc                s0   t  fddtttfD r dS tt| j S )Nc             3   s   | ]}|j  V  qd S )N)r   )r@   r   )r#   r   r   r   2  s   z)NRKTVSeriesIE.suitable.<locals>.<genexpr>F)anyr   r   r   r   r   r   )r   r#   )r   )r#   r   r   /  s    zNRKTVSeriesIE.suitablec                s"   j | j|} j|dd}|rt|dd t}t|dd t}g }|j j|jd |j j|jd |j j	|jd  j
|||S  fd	d
tj j|D } jd|dd dp܈ j|dd}|r jd|d|d} jd|dd dp j|} j
|||S )NF)r   c             S   s   | d d S )Nr   r   r   )r   r   r   r   r   >  s    z-NRKTVSeriesIE._real_extract.<locals>.<lambda>c             S   s   | d d S )Nr   rn   r   )r   r   r   r   r   @  s    r   ZinstalmentsZextraMaterialc                s    g | ]} j d j|dqS )z4https://tv.nrk.no/program/Episodes/{series}/{season})rE   r7   )r   format)r@   	season_id)r   	series_idr   r   rB   I  s   z/NRKTVSeriesIE._real_extract.<locals>.<listcomp>Zseriestitler   )r8   u!   NRK (?:Super )?TV\s*[-–]\s*(.+)series_descriptionrC   )rT   r   r   r   r   r   r   r?   r   r   re   r   findall_ITEM_RE_html_search_meta_og_search_titlerb   _og_search_description)r   r#   r   rE   r   rC   rg   r   )r   r   r   rt   6  s2    

zNRKTVSeriesIE._real_extract)
ru   rv   rw   r   r   r   r   r   rt   r   r   r   )r   r   r     s<   
r   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/nrk1T)r#   r   z-https://radio.nrk.no/direkte/p1_oslo_akershusN)ru   rv   rw   r   r   r   r   r   r   r   r   ^  s   r   c               @   s   e Zd Zdd Zdd ZdS )NRKPlaylistBaseIEc             C   s   d S )Nr   )r   r   r   r   r   _extract_descriptionl  s    z&NRKPlaylistBaseIE._extract_descriptionc                sV    j |} j||} fddtj j|D } j|} j|} j||||S )Nc                s    g | ]} j d | tj qS )znrk:%s)r   rx   r   )r@   r!   )r   r   r   rB   u  s   z3NRKPlaylistBaseIE._real_extract.<locals>.<listcomp>)rT   r   r   r   r   _extract_titler   re   )r   r#   playlist_idr   rg   playlist_titleplaylist_descriptionr   )r   r   rt   o  s    



zNRKPlaylistBaseIE._real_extractN)ru   rv   rw   r   rt   r   r   r   r   r   k  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:c2df8ea3bac5654a26fc2834a542feed)r   r   rC   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 )NF)r   )r   )r   r   r   r   r   r     s    zNRKPlaylistIE._extract_titlec             C   s
   | j |S )N)r   )r   r   r   r   r   r     s    z"NRKPlaylistIE._extract_descriptionN)ru   rv   rw   r   r   r   r   r   r   r   r   r   r     s   
r   c               @   s6   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=["\']%sz6https://tv.nrk.no/program/episodes/nytt-paa-nytt/69031Z69031u   Nytt på nytt, sesong: 201210)r   r      )r#   r~   r   c             C   s   | j d|dddS )Nz<h1>([^<]+)</h1>r   F)r   )_html_search_regex)r   r   r   r   r   r     s    zNRKTVEpisodesIE._extract_titleN)	ru   rv   rw   r   r   r   r   r   r   r   r   r   r   r     s   

r   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=14099Z 18c12c3d071953c3bf8d54ef6b2587b7Z6021r{   zGenetikk og eneggede tvillingerz$md5:3aca25dcf38ec30f0363428d2b265f8di  )r   r|   r   rC   r&   )r#   r}   r~   zYhttps://www.nrk.no/skole/?page=objectives&subject=naturfag&objective=K15114&mediaId=19355T)r#   r   c             C   sF   | j |}| jd| |}| j| jd|d|d d }| jd| S )Nz1https://mimir.nrk.no/plugin/1.0/static?mediaId=%szA<script[^>]+type=["\']application/json["\'][^>]*>({.+?})</script>zapplication jsonZactiveMediaZpsIdznrk:%s)rT   r   r   rb   r   )r   r#   r!   r   r   r   r   r   rt     s    
zNRKSkoleIE._real_extractN)ru   rv   rw   r   r   r   rt   r   r   r   r   r     s   

r   )
__future__r   r   commonr   compatr   r   utilsr   r	   r
   r   r   r   r   r   r   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s$   ( 2/ 4) `