
    VGhe1                     z    d dl mZ ddlmZmZmZmZmZ ddlm	Z	  G d de      Z
 G d de
      Z G d	 d
e
      Zy)   )InfoExtractor   )int_or_nonejoin_nonemptymerge_dictsparse_counturl_or_none)traverse_objc                   &    e Zd ZdZdgZddZddZy)	NFBBaseIEz(https?://(?:www\.)?(?P<site>nfb|onf)\.caCAc                 6    | j                  d|d||      xs i S )NzepisodesData\s*:zepisode datafatal)_search_json)selfwebpagevideo_idr   s       ]/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/nfb.py_extract_ep_datazNFBBaseIE._extract_ep_data   s0      .(% ! Q WTV	W    Nc                 &   t        |fddt        hfdt        hfddt        hfddt        hfddt        hfddt        hfddt        hfdd	t        hfd
fd      }i |t        dd|d      t        | j                  d|xs dd             dS )Nc                     |d   v S N	embed_url )_vr   s     r   <lambda>z,NFBBaseIE._extract_ep_info.<locals>.<lambda>   s    AkN0J r   descriptionthumbnail_url
data_layerepisodeMakerepisodeYearepisodeTitleseasonTitleseriesTitle)r    	thumbnailuploaderrelease_yearepisodeseasonseason_numberseriesF)get_allr.   r+   z - )	from_dictdelimz![/-]e(?:pisode)?-?(\d+)(?:[/-]|$)zepisode numberdefault)idtitleepisode_number)r
   strr	   r   r   r   _search_regex)r   datar   sluginfos     `  r   _extract_ep_infozNFBBaseIE._extract_ep_info   s    D#J)C51)K=9%~u=)=;-H$nse<#]SE:*MK=I#]SE:	M
 	# 	

"8Y$eT)$*<*<4d6FhHXbf += +h i	
 	
r   )F)N)__name__
__module____qualname___VALID_URL_BASE_GEO_COUNTRIESr   r<   r   r   r   r   r      s    AOVNW
r   r   c                      e Zd ZdZdZej                   dej                   dgZ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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!d.d#d/d%d&dd'ddidd0d1d2dd3d4d5d6d.d#d7d#d8dd'ddidd9d:d;dd<d=d>d6d"d#d?d#d8dd'ddidd@dAd;dd<d=d>d6d"d#d?d#d8dd'ddiddBdCd2dd3d4d5d6d.d#d7d#d8dd'ddiddDdEdFddGdHdIdJdKdLdMdNdOdd'ddiddPdQdRddSdTdUdVdWddXddidg
ZdY Z	yZ)[NFBIEnfbz$nfb.ca and onf.ca films and episodesz /(?P<type>film)/(?P<id>[^/?#&]+)z?/(?P<type>series?)/(?P<id>[^/?#&]+/s(?:ea|ai)son\d+/episode\d+)zNFB filmz%https://www.nfb.ca/film/trafficopter/trafficoptermp4Trafficopterz$md5:060228455eb85cf88785c41656776bc0zre:^https?://.*\.jpg$zBarrie Howellsi  g     @)r4   extr5   r    r(   r)   r*   durationskip_downloadm3u8)noteurl	info_dictparamszONF filmz&https://www.onf.ca/film/mal-du-siecle/zmal-du-siecleu   Le mal du sièclez$md5:1abf774d77569ebe603419f2d344102bzCatherine Lepagei  g     r@zNFB episode with English titlez\https://www.nfb.ca/series/true-north-inside-the-rise-of-toronto-basketball/season1/episode9/z/true-north-episode9-true-north-finale-making-itzETrue North: Inside the Rise of Toronto Basketball - Finale: Making Itz_We catch up with each player in the midst of their journey as they reflect on their road ahead.z1True North: Inside the Rise of Toronto Basketballi  zSeason 1r   zFinale: Making It	   zRyan Sidhoo)r4   rH   r5   r    r.   r*   r,   r-   r+   r6   r)   r(   zONF episode with French titlez[https://www.onf.ca/serie/direction-nord-la-montee-du-basketball-a-toronto/saison1/episode9/zdirection-nord-episode-9uJ   Direction nord – La montée du basketball à Toronto - Finale : Réussirz$md5:349a57419b71432b97bf6083d92b029du6   Direction nord – La montée du basketball à TorontozSaison 1u   Finale : Réussirz0NFB episode with French title (needs geo-bypass)z:https://www.nfb.ca/series/etoile-du-nord/saison1/episode1/z%etoile-du-nord-episode-1-lobservationu   Étoile du Nord - L'observationz$md5:161a4617260dee3de70f509b2c9dd21bu   Étoile du Nordi  zL'observationu   Patrick Bosséz1ONF episode with English title (needs geo-bypass)z5https://www.onf.ca/serie/north-star/season1/episode1/z north-star-episode-1-observationzNorth Star - Observationz$md5:c727f370839d8a817392b9e3f23655c7z
North StarObservationz@NFB episode with /film/ URL and English title (needs geo-bypass)z9https://www.nfb.ca/film/north-star-episode-1-observation/z?ONF episode with /film/ URL and French title (needs geo-bypass)z>https://www.onf.ca/film/etoile-du-nord-episode-1-lobservation/z<Season 2 episode w/o episode num in id, extract from json ldzChttps://www.onf.ca/film/liste-des-choses-qui-existent-saison-2-oursz+liste-des-choses-qui-existent-saison-2-oursz4La liste des choses qui existent - L'ours en peluchez$md5:d5e8d8fc5f3a7385a9cf0f509b37e28az La liste des choses qui existenti  zSaison 2r   zL'ours en peluche   zFrancis PapillonzNFB film /embed/player/ pagez/https://www.nfb.ca/film/afterlife/embed/player/	afterlife	Afterlifez$md5:84951394f594f1fb1e62d9c43242fdf5i  g     @z@z
Ishu Patel)r4   rH   r5   r    r*   rI   r)   r(   c                    | j                  |      j                  ddd      \  }}}| j                  d| d| d| d|      \  }}| j                  |j                        j                  dd      \  }}| j	                  d|d|      }| j                  |d	   d
         }| j                  |d   |dd      \  }	}
t        |j                  d            x}rJ| j                  ||dddd      \  }}|D ]  }d|d<   	 |	j                  |       | j                  ||
       |dk(  rv|| j                  d|dd       | j                  d|dd       t        |j                  d            | j                  d|dd       t        | j                  d |d!d             d"n"| j                  | j                  |||      |      }t        |	|
d#|| j!                  ||i             S )$Nsitetyper4   https://www..ca//z$window\.PLAYER_OPTIONS\[[^\]]+\]\s*=zplayer dataoverlayrM   sourcerF   hls)m3u8_iddvSourcedvF)r^   
preferencer   zdescribed videoformat_note)targetfilmz0["\']nfb_version_title["\']\s*:\s*["\']([^"\']+)r5   r2   z;<[^>]+\bid=["\']tabSynopsis["\'][^>]*>\s*<p[^>]*>\s*([^<]+)r    posterz0<[^>]+\bitemprop=["\']director["\'][^>]*>([^<]+)r)   z/["\']nfb_version_year["\']\s*:\s*["\']([^"\']+)r*   )r4   r5   r    r(   r)   r*   )formats	subtitles)_match_valid_urlgroup_download_webpage_handlerM   r   	_match_id#_extract_m3u8_formats_and_subtitlesr	   getextend_merge_subtitles_html_search_regexr   r<   r   r   _search_json_ld)r   rM   rV   type_r:   r   urlhplayer_datar   rg   rh   	dv_sourcefmtssubsfmtr;   s                   r   _real_extractzNFBIE._real_extract   sW    11#6<<VVTReT55TF$ugUVW[V\\]6^`de++DHH5;;FDIt''3WmTS>>+i"8"?@!EE!8UE F C $KOOJ$?@@9@AA8UDRu B VJD$ 7%6M"7NN4 !!$y!9  f_ ,,C$ - 0  22N 3 6 %[__X%>?//CWjbf 0 h'(?(?B )@ )7 8
 #'"7"78M8MgW_ae8fhp"q 	  "
 %%gx%DF 	Fr   N)
r=   r>   r?   IE_NAMEIE_DESCr   r@   
_VALID_URL_TESTSrz   r   r   r   rC   rC   )   s   G4G%%&&FG%%&&efJ
 6 #A1( 	
 #F+ 7!(A1* 	
 #F+ 1mC\|I  *%1
 #F+#& 0l,aAN  *%1
 #F+#& CK97A'  '(1
 #F+#& DF4/A"  $(1
 #F+#& SJ4/A"  $(1
 #F+#& RO97A'  '(1
 #F+#& OT?LA8  + *1
 #F+#& /@ A $1	
 #F+uhFT)Fr   rC   c                   ^    e Zd ZdZdZej                   dZddddidd	d
ddidgZd Z	d Z
y)NFBSeriesIEz
nfb:seriesznfb.ca and onf.ca seriesz//(?P<type>series?)/(?P<id>[^/?#&]+)/?(?:[?#]|$)zKhttps://www.nfb.ca/series/true-north-inside-the-rise-of-toronto-basketball/rP   r4   z0true-north-inside-the-rise-of-toronto-basketball)rM   playlist_mincountrN   z@https://www.onf.ca/serie/la-liste-des-choses-qui-existent-serie/   z&la-liste-des-choses-qui-existent-seriec              #      K   t        |d       D ]W  }t        j                  |d         } | j                  |d   t        fi | j	                  |g|j                  d             Y y w)Nc                 2    t         j                  |d         S r   )rC   suitable)r   r   s     r   r   z&NFBSeriesIE._entries.<locals>.<lambda>  s    5>>!K.;Y r   r       r4   )r
   rC   ri   
url_resultr<   rj   )r   episodesr+   mobjs       r   _entrieszNFBSeriesIE._entries  ss     #H.YZ 	VG))'+*>?D!$//QV"&"7"7	4::dCS"TV V	Vs   A)A+c                    | j                  |      j                  ddd      \  }}}|dk(  rdnd}| j                  d| d| d	| d	| d
	|      }| j                  ||d      }| j	                  | j                  |      |      S )NrV   rW   r4   seriesaisonr,   rX   rY   rZ   z
1/episode1Tr   )ri   rj   _download_webpager   playlist_resultr   )r   rM   rV   rs   	series_idseason_pathr   r   s           r   rz   zNFBSeriesIE._real_extract  s    !%!6!6s!;!A!A&&RV!WeY"'7"2h((4&UG1YKqZPR[](()4(H##DMM($;YGGr   N)r=   r>   r?   r{   r|   r   r@   r}   r~   r   rz   r   r   r   r   r     sb    G(G..//^_J\D
 R:
FVHr   r   N)commonr   utilsr   r   r   r   r	   utils.traversalr
   r   rC   r   r   r   r   <module>r      sB    !  +
 
:ZFI ZFzH) Hr   