
    V|he1                     z    S SK Jr  SSKJrJrJrJrJr  SSKJ	r	   " S S\5      r
 " S S\
5      r " S	 S
\
5      rg)   )InfoExtractor   )int_or_nonejoin_nonemptymerge_dictsparse_counturl_or_none)traverse_objc                   2    \ rS rSrSrS/rSS jrS	S jrSrg)
	NFBBaseIE   z(https?://(?:www\.)?(?P<site>nfb|onf)\.caCAc                 8    U R                  SUSX#S9=(       d    0 $ )NzepisodesData\s*:zepisode datafatal)_search_json)selfwebpagevideo_idr   s       N/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/nfb.py_extract_ep_dataNFBBaseIE._extract_ep_data   s.      .( ! Q WTV	W    Nc                    ^ [        UU4S jS[        14S[        14SS[        14SS[        14SS[        14SS[        14SS[        14SS	[        14S
.4SS9n0 UET[        SSUSS9[        U R                  SU=(       d    TSS S95      S.E$ )Nc                    > TUS   ;   $ N	embed_url )_vr   s     r   <lambda>,NFBBaseIE._extract_ep_info.<locals>.<lambda>   s    AkN0Jr   descriptionthumbnail_url
data_layerepisodeMakerepisodeYearepisodeTitleseasonTitleseriesTitle)r#   	thumbnailuploaderrelease_yearepisodeseasonseason_numberseriesF)get_allr1   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_info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   r   )F)N)	__name__
__module____qualname____firstlineno___VALID_URL_BASE_GEO_COUNTRIESr   r?   __static_attributes__r   r   r   r   r      s    AOVNW
r   r   c                      \ rS rSrSrSr\R                   S3\R                   S3/rSSSS	S
SSSSSS.SS0S.SSSS	SSSSSSS.SS0S.SSSS	SS S!S"S#S$S%S&S'SS(.SS0S.S)S*S+S	S,S-S.S"S/S$S0S&S'SS(.SS0S.S1S2S3S	S4S5S6S7S/S$S8S$S9SS(.SS0S.S:S;S<S	S=S>S?S7S#S$S@S$S9SS(.SS0S.SASBS<S	S=S>S?S7S#S$S@S$S9SS(.SS0S.SCSDS3S	S4S5S6S7S/S$S8S$S9SS(.SS0S.SESFSGS	SHSISJSKSLSMSNSOSPSS(.SS0S.SQSRSSS	STSUSVSWSXSSY.SS0S./
r	SZ r
S[rg\)]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     @)r7   extr8   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)r7   rO   r8   r#   r1   r-   r/   r0   r.   r9   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 pelucher   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)r7   rO   r8   r#   r-   rP   r,   r+   c                    U R                  U5      R                  SSS5      u  p#nU R                  SU SU SU S3U5      u  pVU R                  UR                  5      R                  SS5      u  p4U R	                  SUSU5      nU R                  US	   S
   5      nU R                  US   USSS9u  p[        UR                  S5      5      =n(       aC  U R                  XSSSSS9u  pU H  nSUS'   M
     U	R                  U5        U R                  XS9  US:X  aj  UU R                  SUSS S9U R                  SUSS S9[        UR                  S5      5      U R                  SUSS S9[        U R                  S US!S S95      S".O!U R                  U R                  XXU5      U5      n[        U	U
S#.XR!                  XX0 S95      $ )$Nsitetyper7   https://www..ca//z$window\.PLAYER_OPTIONS\[[^\]]+\]\s*=zplayer dataoverlayrT   sourcerM   hls)m3u8_iddvSourcedvF)rd   
preferencer   zdescribed videoformat_note)targetfilmz0["\']nfb_version_title["\']\s*:\s*["\']([^"\']+)r8   r5   z;<[^>]+\bid=["\']tabSynopsis["\'][^>]*>\s*<p[^>]*>\s*([^<]+)r#   posterz0<[^>]+\bitemprop=["\']director["\'][^>]*>([^<]+)r,   z/["\']nfb_version_year["\']\s*:\s*["\']([^"\']+)r-   )r7   r8   r#   r+   r,   r-   )formats	subtitles)_match_valid_urlgroup_download_webpage_handlerT   r   	_match_id#_extract_m3u8_formats_and_subtitlesr	   getextend_merge_subtitles_html_search_regexr   r?   r   r   _search_json_ld)r   rT   r\   type_r=   r   urlhplayer_datar   rm   rn   	dv_sourcefmtssubsfmtr>   s                   r   _real_extractNFBIE._real_extract   s=    11#6<<VVTRT55TF$ugUVW[V\\]6^`de++DHH5;;FDI''3WmTS>>+i"8"?@!EE!8UE F C $KOOJ$?@@9@AAUDRu B VJD%6M" NN4 !!$!9  f_ ,,C$ - 0  22N 3 6 %[__X%>?//CWjbf 0 h'(?(?B )@ )7 8
 #'"7"78M8Mgae8fhp"q 	  "
 %%g%DF 	Fr   r   N)rA   rB   rC   rD   IE_NAMEIE_DESCr   rE   
_VALID_URL_TESTSr   rG   r   r   r   rI   rI   )   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   rI   c                   f    \ rS rSrSrSr\R                   S3rSSSS0S	.S
SSS0S	./r	S r
S rSrg)NFBSeriesIEi  z
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/rW   r7   z0true-north-inside-the-rise-of-toronto-basketball)rT   playlist_mincountrU   z@https://www.onf.ca/serie/la-liste-des-choses-qui-existent-serie/   z&la-liste-des-choses-qui-existent-seriec              #      #    [        US 5       HX  n[        R                  US   5      nU R                  " US   [        40 U R	                  U/UR                  S5      5      D6v   MZ     g 7f)Nc                 2    [         R                  US   5      $ r   )rI   suitable)r   r    s     r   r!   &NFBSeriesIE._entries.<locals>.<lambda>  s    5>>!K.;Yr   r       r7   )r
   rI   ro   
url_resultr?   rp   )r   episodesr.   mobjs       r   _entriesNFBSeriesIE._entries  sj     #H.YZG))'+*>?D//QV"&"7"7	4::dCS"TV V [s   A+A-c                     U R                  U5      R                  SSS5      u  p#nUS:X  a  SOSnU R                  SU SU S	U S	U S
3	U5      nU R                  XdSS9nU R	                  U R                  U5      U5      $ )Nr\   r]   r7   seriesaisonr/   r^   r_   r`   z
1/episode1Tr   )ro   rp   _download_webpager   playlist_resultr   )r   rT   r\   ry   	series_idseason_pathr   r   s           r   r   NFBSeriesIE._real_extract  s    !%!6!6s!;!A!A&&RV!WY"'7"2h((4&UG1YKqZPR[]((4(H##DMM($;YGGr   r   N)rA   rB   rC   rD   r   r   r   rE   r   r   r   r   rG   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   rI   r   r   r   r   <module>r      sB    !  +
 
:ZFI ZFzH) Hr   