U
    $Pf"n                     @   s4  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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_HTTPError
compat_str)determine_extExtractorErrorfix_xml_ampersandsint_or_nonemerge_dicts
orderedSetparse_duration	qualitiesstr_or_nonestrip_jsonpunified_strdateunified_timestampurl_or_noneurlencode_postdatac                   @   s   e Zd Zdd ZdS )	NPOBaseIEc                 C   s   | j d|ddd S )Nz!http://ida.omroep.nl/app.php/authDownloading token)Znotetoken)_download_json)selfvideo_id r   </tmp/pip-unpacked-wheel-7zdooeg3/youtube_dl/extractor/npo.py
_get_token   s     zNPOBaseIE._get_tokenN)__name__
__module____qualname__r   r   r   r   r   r      s   r   c                       sV  e Zd 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"d#id$d%d&d'd(d)d"d#id$d*d+dd,d-d.d/dd"d#id$d0d1dd2d3d.d4dd"d#id$d5d6d7d8d9d:d"d#id$d;d#d<d=d#d<d>d#d<d?d#d<d@d#d<dAd#d<dBd#d<dCd#d<dDd#d<gZe fdEdFZdGdH Z	dIdJ Z
dKdL Z  ZS )MNPOIEnpoz1npo.nl, ntr.nl, omroepwnl.nl, zapp.nl and npo3.nla  (?x)
                    (?:
                        npo:|
                        https?://
                            (?:www\.)?
                            (?:
                                npo\.nl/(?:[^/]+/)*|
                                (?:ntr|npostart)\.nl/(?:[^/]+/){2,}|
                                omroepwnl\.nl/video/fragment/[^/]+__|
                                (?:zapp|npo3)\.nl/(?:[^/]+/){2,}
                            )
                        )
                        (?P<id>[^/?#]+)
                z4http://www.npo.nl/nieuwsuur/22-06-2014/VPWON_1220719Z 4b3f9c429157ec4775f2c9cb7b911016ZVPWON_1220719m4vZ	Nieuwsuurz=Dagelijks tussen tien en elf: nieuws, sport en achtergronden.Z20140622idexttitledescriptionupload_dateurlmd5	info_dictzIhttp://www.npo.nl/de-mega-mike-mega-thomas-show/27-02-2009/VARA_101191800Z da50a5787dbfc1603c4ad80f31c5120bZVARA_101191800z-De Mega Mike & Mega Thomas show: The best of.z$md5:3b74c97fc9d6901d5a665aac0e5400f4Z20090227i`	  )r&   r'   r(   r)   r*   durationz5http://www.npo.nl/tegenlicht/25-02-2013/VPWON_1169289 f8065e4e5a7824068ed3c7e783178f2cVPWON_1169289z3Tegenlicht: Zwart geld. De toekomst komt uit Afrika$md5:52cf4eefbc96fffcbdc06d024147abea20130225i  zAhttp://www.npo.nl/de-nieuwe-mens-deel-1/21-07-2010/WO_VPRO_043706ZWO_VPRO_043706zDe nieuwe mens - Deel 1z$md5:518ae51ba1293ffb80d8d8ce90b74e4biH  )r&   r'   r(   r)   r/   skip_downloadTr,   r.   paramszKhttp://www.npo.nl/hoe-gaat-europa-verder-na-parijs/10-01-2015/WO_NOS_762771ZWO_NOS_762771mp4z!Hoe gaat Europa verder na Parijs?r&   r'   r(   zMhttp://www.ntr.nl/Aap-Poot-Pies/27/detail/Aap-poot-pies/VPWON_1233944#contentZVPWON_1233944zAap, poot, piesz$md5:c9c8005d1869ae65b858e82c01a91fdeZ20150508iW  zShttp://www.omroepwnl.nl/video/fragment/vandaag-de-dag-verkiezingen__POMS_WNL_853698ZPOW_00996502z"Dit is wel een 'landslide'..."z$md5:f8d66d537dfb641380226e31ca57b8e8i  zRhttp://www.npo.nl/jouw-stad-rotterdam/29-01-2017/RBX_FUNX_6683215/RBX_FUNX_7601437ZRBX_FUNX_6683215mp3zJouw Stad Rotterdamz$md5:db251505244f097717ec59fabc372d9f)r&   r'   r(   r)   z0http://www.zapp.nl/de-bzt-show/gemist/KN_1687547r,   Zonly_matchingz7http://www.zapp.nl/de-bzt-show/filmpjes/POMS_KN_7315118zChttp://www.zapp.nl/beste-vrienden-quiz/extra-video-s/WO_NTR_1067990z8https://www.npo3.nl/3onderzoekt/16-09-2015/VPWON_1239870znpo:LI_NL1_4188102z5http://www.npo.nl/radio-gaga/13-06-2017/BNN_101383373z]https://www.zapp.nl/1803-skelterlab/instructie-video-s/740-instructievideo-s/POMS_AT_11736927z?https://www.npostart.nl/broodje-gezond-ei/28-05-2018/KN_1698996zhttps://npo.nl/KN_1698996c                    s0   t  fddtttfD r dS tt|  S )Nc                 3   s   | ]}|  V  qd S N)suitable).0Zier,   r   r   	<genexpr>   s   z!NPOIE.suitable.<locals>.<genexpr>F)any	NPOLiveIE
NPORadioIENPORadioFragmentIEsuperr"   r<   clsr,   	__class__r>   r   r<      s
    zNPOIE.suitablec                 C   s    |  |}| ||p| |S r;   )	_match_id	_get_info_get_old_info)r   r,   r   r   r   r   _real_extract   s    
zNPOIE._real_extractc                 C   s  | j d|d|dddd }| j d| |dtd	d
|d	|dd}|d }d}t }g }dD ]6}	| j d| |d|	 d|	d|ddd}
|
sq\|
d}t|tsq\t|d}|r\||krq\|| |dd k	s|dd k	rd}q\|d}t|}|dks|dkr,|	| j
||ddd q\|dks@|d kr^|	| j||d!d"d#dd$ q\td%|r|	| j||d&dd' q\|d(|i q\|s|rtd)dd*d S | | |||d+}t|d,}|r| j||d-dd.}|r| | jd/|d0d1d2|}|r|d3}i }|d4}t|tr|D ]H}t|d}|sXq<t|d5pjd6}||g d(|i q<t||d7t|d8p|d9t|d:t|d;|d<|d=|t|d>|d?
|S |S )@Nz!https://www.npostart.nl/api/tokenr   ZXMLHttpRequest)ZRefererzX-Requested-With)headersr   z!https://www.npostart.nl/player/%szDownloading player JSONr   r   )autoplayZshareZpageUrlZhasAdConsent_token)dataF)hlszdash-widevinezdash-playreadyZsmoothz,https://start-player.npo.nl/video/%s/streamszDownloading %s profile JSONr#   	broadcast)profilequalityZtokenIdZ
streamType)fatalquerystreamsrcZ
protectionZkeySystemOptionsTtypezapplication/dash+xmlZmpdZdash)Zmpd_idrU   zapplication/vnd.apple.mpegurlm3u8r7   m3u8_nativerQ   r'   Zentry_protocolZm3u8_idrU   z\.isml?/ManifestZmss)Zism_idrU   r,   zThis video is DRM protected.expected)r&   r(   formatsZembedUrlzDownloading embed pagerU   z\bvideo\s*=\s*({.+?})\s*;videoz{}defaultZepisodeTitle	subtitleslanguagenlr)   Zstill_image_urlZorig_image_urlr/   ZbroadcastDateZchannelr(   ZepisodeNumber)
r(   r)   	thumbnailr/   	timestampZcreatorZseriesZepisodeZepisode_numberrd   )r   r   setget
isinstancedictr   addr   extendZ_extract_mpd_formats_extract_m3u8_formatsresearchZ_extract_ism_formatsappendr	   _sort_formats_download_webpage_parse_json_search_regexlistr   
setdefaultr   r   r   )r   r,   r   r   ZplayerZplayer_tokenZdrmZformat_urlsr_   rS   streamsrW   
stream_urlstream_typeZ
stream_extinfoZ	embed_urlwebpagera   r(   rd   Zsubtitles_listccZcc_urllangr   r   r   rJ      s      

  	



   
    
   
 
     

 
zNPOIE._get_infoc                    sr  j d| |td}|d}|r.t|dd|dp:|}|d }|d}|rf||krf|d	| 7 }|}g t fd
d}dd tt j d| |dd|ddd d }t|D ]\}	}
|
d}||sqʈ| j	d|dd d|
d fdd}|
ddkrB|| qz2 |d |d pn|
d pnpn|	}W nz tk
r } zZt
|jtr|jjd!kr܈j|j  |d"d#pi d$}|rt|dd W 5 d }~X Y nX t
|tr|d%s
q|}n
|d}|rd&|ks|kr2qʈ| t|d'krhj||d(d)d*d"d+ q|| q|d,d-k}|st|d.g D ]N\}	}|d}||sq| |d/d0 }|d1krq|d2krj||d"d#}|D ]}d3|d4< q| n|d*kr>j||d(d"d5 nd6|krΈj||d7|	 td"d8}|sjq|d9}|d krq|d:}|r|krq| ||d;d<|d=d>d? n||d=d@ q i }|dAdBkrdCdD| dEg|dF< ||r,|n||dG|dHdd igd3 d t|dIt|dJ||dK	S )LNzhttp://e.omroep.nl/metadata/%s)transform_sourceerrorTr]   ZpridZtitelZaflevering_titelz: %sc                    s   | o|  kot d| S )Nz^(?:https?:)?//)rp   match)
format_url)urlsr   r   is_legal_urlH  s     z)NPOIE._get_old_info.<locals>.is_legal_url)ZLaagZNormaalZHoog)adaptiveZwmv_sbZh264_sbZwmv_bbZh264_bbZwvc1_stdZh264_stdzhttp://ida.omroep.nl/app.php/%szDownloading formats JSONyes)r   r   )rV   itemsr   r,   zvideo/ida/([^/]+)z	format idrb   labelc                    s   t jd| dd d}t jd| dd d}krB}}n$ krX}}nd gd \}}| ||||d d S )Nz(\d+)[xX]\d+widthrb   z\d+[xX](\d+)heightr   )r,   	format_idr   r   rT   )r   rv   rr   )r   r   r   rT   Zf_id)QUALITY_FORMATSQUALITY_LABELSr   r_   
item_labelquality_from_format_idquality_from_labelr   r   r   add_format_urlb  s4          z+NPOIE._get_old_info.<locals>.add_format_urlcontentType)r,   audioz
&type=jsonzDownloading %s stream JSONformati  Fr`   Zerrorstringhttpzvodnotavailable.rZ   r7   r[   rQ   r\   ZmediumZlivery   rY    )ssmsZhds
preference)r'   rU   z.asfz"Downloading stream %d ASX playlist)r   rU   z./ENTRY/RefhrefZformaatZasfZ	kwaliteiti)r,   r'   rT   r   )r,   rT   Ztt888jaZvttzhttp://tt888.omroep.nl/tt888/%s)r'   r,   rf   r|   ZimagesZ	gidsdatumZ	tijdsduur)	r&   r(   r)   rg   r*   r/   r_   rd   is_live) r   r   rj   r	   r   ri   r   	enumeraterm   rv   rk   causer   coderu   readdecoder   
startswithr   rn   ro   lowerZ_extract_f4m_formatsZ_download_xmlr
   findrr   rs   _live_titler   r   )r   r   metadatar   r(   Z	sub_titler   r   r   numitemZitem_urlr   Zstream_infoeeZ	video_urlr   rW   rz   r{   Zf4m_formatsZ
f4m_formatZasxrefrd   r   )	r   r   r   r_   r   r   r   r   r   r   rK   +  sF   


 

  
  

    






  
   

  






zNPOIE._get_old_info)r   r    r!   IE_NAMEZIE_DESC
_VALID_URL_TESTSclassmethodr<   rL   rJ   rK   __classcell__r   r   rG   r   r"   #   s     	 	  {qr"   c                   @   sJ   e Zd ZdZdZddddddd	d
didddddddgZdd ZdS )rA   znpo.nl:livez?https?://(?:www\.)?npo(?:start)?\.nl/live(?:/(?P<id>[^/?#&]+))?zhttp://www.npo.nl/live/npo-1ZLI_NL1_4188102npo-1r7   z7re:^NPO 1 [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$T)r&   
display_idr'   r(   r   r4   r5   zhttp://www.npo.nl/liver:   z"https://www.npostart.nl/live/npo-1c                 C   sD   |  |pd}| ||}| ddg|d}dd| t ||dS )Nr   zmedia-id="([^"]+)"zdata-prid="([^"]+)"zlive idurl_transparentnpo:%s)_typer,   ie_keyr&   r   )rI   rt   rv   r"   r   )r   r,   r   r}   Zlive_idr   r   r   rL     s      zNPOLiveIE._real_extractN)r   r    r!   r   r   r   rL   r   r   r   r   rA     s*    rA   c                       sV   e Zd ZdZdZddddddd	did
Ze fddZedd Z	dd Z
  ZS )rB   znpo.nl:radioz.https?://(?:www\.)?npo\.nl/radio/(?P<id>[^/]+)zhttp://www.npo.nl/radio/radio-1zradio-1r9   z=re:^NPO Radio 1 [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$T)r&   r'   r(   r   r4   r5   c                    s   t |rdS tt| |S )NF)rC   r<   rD   rB   rE   rG   r   r   r<     s    zNPORadioIE.suitablec                 C   s
   d | S )Nz{0}\s*=\s*\'([^\']+)\')r   )	attributer   r   r   _html_get_attribute_regex   s    z$NPORadioIE._html_get_attribute_regexc                 C   sl   |  |}| ||}| | d|d}| | | d|d|}|d}||d | |||ddS )Nzdata-channelr(   zdata-streamscodecr,   T)r&   r,   r(   Zacodecr'   r   )rI   rt   _html_search_regexr   ru   rj   r   )r   r,   r   r}   r(   rW   r   r   r   r   rL   $  s&    
  
zNPORadioIE._real_extract)r   r    r!   r   r   _TESTr   r<   staticmethodr   rL   r   r   r   rG   r   rB     s"    
rB   c                   @   s0   e Zd ZdZdZddddddd	Zd
d ZdS )rC   znpo.nl:radio:fragmentz;https?://(?:www\.)?npo\.nl/radio/[^/]+/fragment/(?P<id>\d+)z/http://www.npo.nl/radio/radio-5/fragment/174356Z dd8cc470dad764d0fdc70a9a1e2d18c2Z174356r9   zJubileumconcert Willeke Albertir8   r+   c                 C   sB   |  |}| ||}| d| |d}| d|d}|||dS )Nz/href="/radio/[^/]+/fragment/%s" title="([^"]+)"r(   zdata-streams='([^']+)'z	audio url)r&   r,   r(   )rI   rt   r   rv   )r   r,   Zaudio_idr}   r(   Z	audio_urlr   r   r   rL   J  s     
   z NPORadioFragmentIE._real_extractN)r   r    r!   r   r   r   rL   r   r   r   r   rC   <  s   
rC   c                   @   s   e Zd Zdd ZdS )NPODataMidEmbedIEc                 C   s:   |  |}| ||}| jd|ddd}ddd| |dS )	Nz&data-mid=(["\'])(?P<id>(?:(?!\1).)+)\1r   r&   )groupr   ZNPOr   )r   r   r,   r   )rI   rt   rv   )r   r,   r   r}   r   r   r   r   rL   ^  s    
   zNPODataMidEmbedIE._real_extractNr   r    r!   rL   r   r   r   r   r   ]  s   r   c                   @   s0   e Zd ZdZdZddddddd	d
didZdS )
SchoolTVIEZschooltvz6https?://(?:www\.)?schooltv\.nl/video/(?P<id>[^/?#&]+)zqhttp://www.schooltv.nl/video/ademhaling-de-hele-dag-haal-je-adem-maar-wat-gebeurt-er-dan-eigenlijk-in-je-lichaam/ZWO_NTR_429477zSademhaling-de-hele-dag-haal-je-adem-maar-wat-gebeurt-er-dan-eigenlijk-in-je-lichaamzVAdemhaling: De hele dag haal je adem. Maar wat gebeurt er dan eigenlijk in je lichaam?r7   z$md5:abfa0ff690adb73fd0297fd033aaa631)r&   r   r(   r'   r)   r4   Tr5   Nr   r    r!   r   r   r   r   r   r   r   r   k  s   	 r   c                   @   s2   e Zd ZdZdZddddddd	d
ddidZdS )HetKlokhuisIEZhetklokhuisz=https?://(?:www\.)?hetklokhuis\.nl/[^/]+/\d+/(?P<id>[^/?#&]+)z=http://hetklokhuis.nl/tv-uitzending/3471/ZwaartekrachtsgolvenZVPWON_1260528ZZwaartekrachtsgolvenr$   z"Het Klokhuis: Zwaartekrachtsgolvenz$md5:c94f31fb930d76c2efa4a4a71651dd48Z20170223)r&   r   r'   r(   r)   r*   r4   Tr5   Nr   r   r   r   r   r     s   	 r   c                   @   s   e Zd Zdd ZdS )NPOPlaylistBaseIEc                    sb     |} ||} fddtt j|D } j j|dd dpR |} 	|||S )Nc                    s(   g | ] }  |d sd| n|qS )r   r   )Z
url_resultr   )r=   r   r   r   r   
<listcomp>  s   z3NPOPlaylistBaseIE._real_extract.<locals>.<listcomp>zplaylist titlerb   )
rI   rt   r   rp   findall_PLAYLIST_ENTRY_REr   _PLAYLIST_TITLE_REZ_og_search_titleZplaylist_result)r   r,   Zplaylist_idr}   entriesZplaylist_titler   r   r   rL     s    

  zNPOPlaylistBaseIE._real_extractNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zd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!id"gZd#S )$VPROIEZvprozThttps?://(?:www\.)?(?:(?:tegenlicht\.)?vpro|2doc)\.nl/(?:[^/]+/)*(?P<id>[^/]+)\.html)zC<h1[^>]+class=["\'].*?\bmedia-platform-title\b.*?["\'][^>]*>([^<]+)zF<h5[^>]+class=["\'].*?\bmedia-platform-subtitle\b.*?["\'][^>]*>([^<]+)zdata-media-id="([^"]+)"zQhttp://tegenlicht.vpro.nl/afleveringen/2012-2013/de-toekomst-komt-uit-afrika.htmlr0   r1   r$   zDe toekomst komt uit Afrikar2   r3   r%   z
Video gone)r,   r-   r.   skipz:http://www.vpro.nl/programmas/2doc/2015/sergio-herman.htmlzsergio-hermanzsergio herman: fucking perfectr&   r(   r   r,   r.   Zplaylist_countz@http://www.vpro.nl/programmas/2doc/2015/education-education.htmlzeducation-educationzeducation educationzPhttp://www.2doc.nl/documentaires/series/2doc/2015/oktober/de-tegenprestatie.htmlzde-tegenprestatiezDe TegenprestatiezMhttp://www.2doc.nl/speel~VARA_101375237~mh17-het-verdriet-van-nederland~.htmlZVARA_101375237z MH17: Het verdriet van Nederlandz$md5:09e1a37c1fdb144621e22479691a9f18Z20150716r4   Tr5   Nr   r    r!   r   r   r   r   r   r   r   r   r   r     sX   

	 r   c                   @   s0   e Zd ZdZdZdZdZddddd	d
gZdS )WNLIEZwnlz@https?://(?:www\.)?omroepwnl\.nl/video/detail/(?P<id>[^/]+)__\d+z+(?s)<h1[^>]+class="subject"[^>]*>(.+?)</h1>z6<a[^>]+href="([^"]+)"[^>]+class="js-mid"[^>]*>Deel \d+zAhttp://www.omroepwnl.nl/video/detail/vandaag-de-dag-6-mei__060515zvandaag-de-dag-6-meizVandaag de Dag 6 meir      r   Nr   r   r   r   r   r     s   r   c                   @   s0   e Zd ZdZdZdZdZddddd	d
gZdS )AndereTijdenIEZanderetijdenzIhttps?://(?:www\.)?anderetijden\.nl/programma/(?:[^/]+/)+(?P<id>[^/?#&]+)z@(?s)<h1[^>]+class=["\'].*?\bpage-title\b.*?["\'][^>]*>(.+?)</h1>zX<figure[^>]+class=["\']episode-container episode-page["\'][^>]+data-prid=["\'](.+?)["\']zghttp://anderetijden.nl/programma/1/Andere-Tijden/aflevering/676/Duitse-soldaten-over-de-Slag-bij-Arnhemz'Duitse-soldaten-over-de-Slag-bij-Arnhemz'Duitse soldaten over de Slag bij Arnhemr      r   Nr   r   r   r   r   r     s   r   )#
__future__r   rp   commonr   compatr   r   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r"   rA   rB   rC   r   r   r   r   r   r   r   r   r   r   r   <module>   s&   @   B)1!=