
    i                        S SK r S SKrS SKrS SKrSSKJr  SSKJr  SSK	J
r
  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  SSK J!r!J"r"J#r#   " S	 S
\5      r$ " S S\5      r% " S S\5      r& " S S\5      r' " S S\'5      r( " S S\'5      r) " S S\'5      r* " S S\'5      r+ " S S\'5      r, " S S\5      r-g)    N   )InfoExtractor   )HEADRequest)	HTTPError)ExtractorErrorfloat_or_noneint_or_nonejoin_nonempty
js_to_jsonjwt_decode_hs256mimetype2ext
orderedSetparse_age_limitparse_iso8601replace_extensionsmuggle_urlstrip_or_nonetry_getunified_timestamp
update_urlurl_basenameurl_or_noneurlencode_postdataurljoin)requiretraverse_objtrim_strc                       \ rS rSrSrSrSSSSSS	S
SSS.SS.SSSSSSSSSS.SS.SSSSSSSSSS.S S.S!S"S#SS$S%S&S'SS(.S).S*S+SS,S-S.S/SS(.S)./SS0.S1S2S3S4S5.S6S7./rS8 rS9 rS:r	g;)<CBCIE"   zcbc.caz`https?://(?:www\.)?cbc\.ca/(?!player/|listen/|i/caffeine/syndicate/)(?:[^/?#]+/)+(?P<id>[^/?#]+)zGhttp://www.cbc.ca/22minutes/videos/clips-season-23/don-cherry-play-offs 97e24d09672fc4cf56256d6faa6c25bc
2682904050mp4u   Don Cherry – All-Starsu^   Don Cherry has a bee in his bonnet about AHL player John Scott because that guy’s got heart.iXV20160203CBCC-NEWidexttitledescription	timestampupload_dateuploaderzGeo-restricted to Canadaurlmd5	info_dictskipzPhttp://www.cbc.ca/22minutes/videos/22-minutes-update/22-minutes-update-episode-4 162adfa070274b144f4fdc3c3b8207db
2414435309z*22 Minutes Update: What Not To Wear QuebeczKThis week's latest Canadian top political story is What Not To Wear Quebec.20131025iәjR)r(   r)   r*   r+   r-   r.   r,   zNo longer availablezRhttp://www.cbc.ca/archives/entry/1978-robin-williams-freestyles-on-90-minutes-live 0274a90b51a9b4971fe005c63f592f12
2487345465z,Robin Williams freestyles on 90 Minutes LivezWacky American comedian Robin Williams shows off his infamous "freestyle" comedic talents while being interviewed on CBC's 90 Minutes Live.19780210iAz404 Not Foundznhttp://www.cbc.ca/natureofthings/blog/birds-eye-view-from-vancouvers-burrard-street-bridge-how-we-got-the-shot 377572d0b49c4ce0c9ad77470e0b96b4
2680832926z&An Eagle's-Eye View Off Burrard BridgezwHercules the eagle flies from Vancouver's Burrard Bridge down to a nearby park with a mini-camera strapped to his back.20160201iV)r(   r)   r*   r+   r-   r,   r.   )r1   r2    415a0e3f586113894174dfb31aa5bb1a
2658915080zFly like an eagle!zFEagle equipped with a mini camera flies from the world's tallest tower20150315iU)r0   playlistr3   zJhttp://www.cbc.ca/news/canada/calgary/dog-indoor-exercise-winter-1.3928238zWKeep Rover active during the deep freeze with doggie pushups and other fun indoor tasksz$dog-indoor-exercise-winter-1.3928238z$md5:c18552e41726ee95bd75210d1ca9194c)r*   r(   r+      )r0   r2   playlist_mincountc                 ^   U R                  X[        5      nUR                  S5      nU(       dj  US   nU R                  SU S3USS9nU(       a  [	        US [
        5      nU(       d0  U R                  SU-   U5      S	   S
   S   R                  S5      S   nU R                  SU 3SU5      $ )NmediaIdclipIdzLhttp://tpfeed.cbc.ca/f/ExhSPC/vms_5akSXx4Ng_Zn?byCustomValue={:mpsReleases}{}Ffatalc                     U S   S   S   $ )Nentriesr   guid xs    A/app/mltbenv/lib/python3.13/site-packages/yt_dlp/extractor/cbc.py<lambda>,CBCIE._extract_player_init.<locals>.<lambda>~   s    1Y<?63J    z\http://feed.theplatform.com/f/h9dtGB/punlNGjMlc1F?fields=id&byContent=byReleases%3DbyId%253DrJ   r   r(   /
cbcplayer:	CBCPlayer)_parse_jsonr   get_download_jsonr   strsplit
url_result)selfplayer_init
display_idplayer_infomedia_idclip_idfeeds          rO   _extract_player_initCBCIE._extract_player_initu   s    &&{
K??9-!(+G&&abiajjlmu ' &D "4)JCP..ru||&(()++/116sB@ H:6XNNrR   c                 ~   U R                  U5      nU R                  X5      nU R                  US S9=(       d*    U R                  SUSS S9=(       d    U R	                  U5      nU R                  SUSSUS9nU R                  SUSU0 [        S	9n[        R                  " S
U5       Vs/ s H  nU R                  Xb5      PM     nn/ nS H(  n	UR                  [        R                  " X5      5        M*     UR                  [        USSSSSS SS[        14	5      5        [        USS[        145      =n
(       a  UR                  U
5        UR                  [        U5       Vs/ s H  nU R!                  SU 3SU5      PM     sn5        U R#                  Xr[%        U5      U R'                  U5      5      $ s  snf s  snf )Ndefaultztwitter:titler*   u'   ^(?P<title>.+?)(?:\s*[|–-]\s*CBC.*)?$zcleaned title)grouprh   window\.__INITIAL_STATE__\s*=initial state)rh   transform_sourcez,CBC\.APP\.Caffeine\.initInstance\(({.+?})\);)z%<iframe[^>]+src="[^"]+?mediaId=(\d+)"z<div[^>]+\bid=["\']player-(\d+)zguid["\']\s*:\s*["\'](\d+)detailcontentbody.c                     US   S:H  $ )Ntypepolopoly_mediarL   _vs     rO   rP   %CBCIE._real_extract.<locals>.<lambda>   s    6&66rR   sourceIdapp	contentIdrU   rV   )	_match_id_download_webpage_og_search_title_html_search_meta_html_extract_title_search_regex_search_jsonr   refindallrd   extendr   rZ   appendr   r\   playlist_resultr   _og_search_description)r]   r0   r_   webpager*   datar^   rJ   	media_idsmedia_id_re
content_idra   s               rO   _real_extractCBCIE._real_extract   s   ^^C(
((9&&w&= 6**?GWVZ*[6,,W5 	 ""6?'5 # B   ,gZj ! R  "zz*Y[bcec %%k>c 	 e 	/K RZZ=>	/
 	dii6	:PSu-V W 	X &dUK#,GHH:HZ(&y131 OOj
3[(K13 	4 ##u!5''02 	2#e3s   (F5# F:rL   N)
__name__
__module____qualname____firstlineno__IE_NAME
_VALID_URL_TESTSrd   r   __static_attributes__rL   rR   rO   r    r    "   s'   GtJ Y1/{#%"
 +  b1Ah%"#
 &  d1C j%""
    @5"B  Z)'&
 6"-h)'&
. +5: \n8A

 	KNF`O  2rR   r    c                   B   \ rS rSrSrSrS/r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$S%/_S&S'_S(S)_S*S%_S+S,_S-S._S/S0_S1S2/_S3.S4S5SS6S7S8S9S:/ S;S<S=/S=/ S>QS0S?/S@.SASB0SC.SDS0 SSE_SS_SS_SSF_SS_SS_SS _S!/ _S"S#_S$S%/_S&S'_S(S)_S*S%_S+S,_S-S._S/S0_S1S2/_S3.SGSHSS6S7S8S9S:/ S;S<S=/S=/ S>QS0S?/S@.SASB0SC.SISJ0 SSK_SS_SSL_SSM_SSN_S"SO_SPSQSRSSST./0_SSU_S!SV_SSW_S$/ SXQ_S*SY_S&SZ/_S(S[_S/S\_S1S?/_S3.S]S^0 SS__SS_SS`_SSa_SSb_S"Sc_SPSdSeSfSg./0_SSh_S!/ _S$Si_S*SZ_S&Sj_S(S[_S/S0_SSk_S1S?/_S3.SlSmSSnSoSpSqSrSsStSu/ / Sv// SwQS[Sx.SySASB0Sz.S{S|S}SS~SSZS0SSSS/ / S/ SQS.S3.SSSSSSSS0SSSS/ S?/S?S/SSS.S3.SSS.SSS.SSS./rS rS r	Sr
g)CBCPlayerIE   zcbc.ca:playerzy(?:cbcplayer:|https?://(?:www\.)?cbc\.ca/(?:player/play/(?:video/)?|i/caffeine/syndicate/\?mediaId=))(?P<id>(?:\d\.)?\d+)CAz(http://www.cbc.ca/player/play/2683190193 64d25f841ddf4ddb28a235338af32e2c
2683190193r$   zGerry Runs a Sweat Shopz$md5:b457e1c01e8ff408d9d801c1c2cd29b0iV20160210r&   r'   z0Geo-restricted to Canada and no longer availabler/   z:http://www.cbc.ca/i/caffeine/syndicate/?mediaId=2657631896 e5e708c34ae6fca156aafe17c43e8b75r(   
2657631896r)   mp3r*   z>CBC Montreal is organizing its first ever community hackathon!r+   z$md5:dd3b692f0a139b0369943150bd1c46a9r,   iЅTr-   20150307	thumbnailzChttps://i.cbc.ca/ais/1.2985700,1717262248558/full/max/0/default.jpgchaptersdurationg"~@
categorieszAll in a Weekend Montrealtagszcount:11locationQuebecseriesseasonzSeason 2015season_numberi  
media_typeExcerptgenresOther)r0   r1   r2   z:http://www.cbc.ca/i/caffeine/syndicate/?mediaId=2164402062
2164402062zCancer survivor four times overzNTim Mayer has beaten three different forms of cancer four times in five years.iz޳N20111104zChttps://i.cbc.ca/ais/1.1711287,1717139372111/full/max/0/default.jpgg9v[g@zCBC News: Windsor at 6:00Windsor)CancerzNews/Canada/Windsorr   News)r(   r)   r*   r+   r,   r-   r   r   r   r   r   r   r   r   r   skip_downloadm3u8r0   r2   paramsz(https://www.cbc.ca/player/play/1.2985700z	1.2985700zThe modern technology we tend to depend on so heavily, is never without it's share of hiccups and headaches. Next weekend - CBC Montreal will be getting members of the public for its first Hackathon.z(https://www.cbc.ca/player/play/1.1711287z	1.1711287z.https://www.cbc.ca/player/play/video/9.6424403 8025909eaffcf0adf59922904def9a5ez	9.6424403z(The National | N.W.T. wildfire emergencyz$md5:ada33d36d1df69347ed575905bfd496ciofg#~	@	subtitleszen-USz
re:Englishz_https://cbchls.akamaized.net/delivery/news-shows/2024/06/17/NAT_JUN16-00-55-00/NAT_JUN16_cc.vtt)namer0   z^https://i.cbc.ca/ais/6272b5c6-5e78-4c05-915d-0e36672e33d1,1714756287822/full/max/0/default.jpgzcount:520240617)r   The NationalzThe National Latest BroadcastszThe National - Full Showr   CanadazFull Programz.https://www.cbc.ca/player/play/video/1.7194274 188b96cf6bdcb2540e178a6caa957128z	1.7194274z;#TheMoment a rare white spirit moose was spotted in Albertaz$md5:18ae269a2d0265c5b0bbe4b2e1ac61a3i5fgZdkS@engvttm3u8_native)r)   protocolzChttps://i.cbc.ca/ais/1.7194274,1717224990425/full/max/0/default.jpgzcount:3zcount:1720240504z.https://www.cbc.ca/player/play/video/9.6427282z	9.6427282z#Men's Soccer - Argentina vs MoroccozGArgentina faces Morocco on the football pitch at Saint Etienne Stadium.z
CBC SportszEvent Coveragez^https://i.cbc.ca/ais/a4c5c0c2-99fa-4bd3-8061-5a63879c1b33,1718828053500/full/max/0/default.jpgg   >A20240724g     @z2024 Paris Olympic Games)zOlympics Summer SoccerzSummer Olympics ReplayszSummer Olympics Soccer Replays)r(   r)   r*   r+   r   r   r   r,   r-   r   r   r   r   r   r   zVideo no longer available)r0   r2   r3   r   z.https://www.cbc.ca/player/play/video/9.6459530 6c1bb76693ab321a2e99c347a1d5ecbcz	9.6459530z-Parts of Jasper incinerated as wildfire ragesz$md5:6f1caa8d128ad3f629257ef5fecf0962z^https://i.cbc.ca/ais/507c0086-31a2-494d-96e4-bffb1048d045,1721953984375/full/max/0/default.jpggŨA20240726gzG@zcount:23)zNews (FAST)r   r   zTV News ShowszThe National )r(   r)   r*   r+   r   r   r   r,   r-   r   r   r   r   r   z.https://www.cbc.ca/player/play/video/9.6420651 71a850c2c6ee5e912de169f5311bb533z	9.6420651z>Is it a breath of fresh air? Measuring air quality in Edmontonz$md5:3922b92cc8b69212d739bd9dd095b1c3zCBC News Edmontonz^https://i.cbc.ca/ais/73c4ab9c-7ad4-46ee-bb9b-020fdc01c745,1718214547576/full/max/0/default.jpgg&qH}A20240612gL7A`q@Edmontonzcount:7)r(   r)   r*   r+   r   r   r   r,   r-   r   r   r   r   r   r   zcbcplayer:1.7159484Tr0   only_matchingzcbcplayer:2164402062z(http://www.cbc.ca/player/play/2657631896c                 @   ^ [        USU4S jS[        1[        45      $ )Nr   c                    > US   T:H  $ )Nr   rL   )rt   ru   r   s     rO   rP   *CBCPlayerIE._parse_param.<locals>.<lambda>  s    &	T@QrR   value)r   rZ   any)r]   
asset_datar   s     `rO   _parse_paramCBCPlayerIE._parse_param  s"    J3QSZ]`\acf(ghhrR   c                   ^ U R                  U5      nU R                  SU 3U5      nU R                  SUSU[        S9S   S   n[	        USSS	 45      nU(       d2  [	        US
[
        145      =n(       a  SS[        SU S3SS05      USS.$ [	        USS[
        145      S:H  m/ 0 p[	        USSS 45       HQ  n	UR                  U	R                  S5      =(       d    S/ 5      R                  U	S   U	R                  S5      S.5        MS     U GH  n
U
S   nU
S   nUS:w  a  U R                  SU S U 35        M-  U R                  XS!U S"35      n[        U R                  US#5      5      nUS$:X  Ga  U R                  US%   US&S'TS(9u  nnUR                  U5        U(       d  U R!                  UUS)9  T(       d  U(       d  M  [	        US* ["        [$        R&                  " [(        S+ S,91S-[*        145      =(       d    0 nU R-                  S.UR                  S%5      S/S S09nU(       a  S1U;   a  GM$  U[/        [1        US%   5      S&5      -   nU R3                  [5        U5      US2S3S3S49(       a  UR                  0 UEUS5S6S S S7.E5        GM~  GM  UR                  US%   UU R                  US85      S9:X  a  S:OS S;.5        GM     [	        USS<S= S>[7        S?S@914SA[7        S?S@914SB[
        14SC.45      n[9        U5      SD:X  a4  USE   R                  SF5      (       d  USE   R                  SG5      (       d  / n0 [	        USH[
        14SI[
        R:                  14SJS%[<        1[?        S SK914SL[7        S?S@914SSM[
        14SN[
        14SSO[@        14SSP[6        1U4SQ j14SSR[
        14SSSTSB[
        14SSU["        4SVSTSB[
        14SW.5      EUUUUTSX.E$ )YNhttps://www.cbc.ca/player/play/rj   rk   rl   videocurrentClipmediaassetsc                 6    [        US   5      =(       a    US   $ )Nkeyrq   r   rs   s     rO   rP   +CBCPlayerIE._real_extract.<locals>.<lambda>  s    ;qx3H3VQvY3VrR   rD   url_transparentThePlatformz;http://link.theplatform.com/s/ExhSPC/media/guid/2655402169/z?mbr=true&formats=MPEG4,FLV,MP3force_smil_urlT)resproto)_typeie_keyr0   r(   _format_sort_fields
streamTypeLive
textTracksc                     [        US   5      $ )Nsrcr   rs   s     rO   rP   r     s    ;WXY^W_K`rR   languageundr   label)r0   r   r   rq   medianetz!Skipping unsupported asset type "z": zDownloading z JSONcontentTyper   r0   r$   hls)m3u8_idlive)targetc                 B    UR                  S5      S:g  =(       a    US   $ )Nvcodecnonetbr)rX   rs   s     rO   rP   r     s    xF!:!Gqx!GrR   c                     U S   $ )Nr   rL   rM   s    rO   rP   r     s    QuXrR   )r   rT   z(https?://[^?#]+?/)hdntl=zbase urlrg   z/live/zChecking for https formatF)errnoterH   z	https-mp4https)r0   	format_idr   manifest_urlacodec	mediaTypeaudior   )r0   r)   r   r   c                 "    [        US   5      S L$ )N	startTime)floatrs   s     rO   rP   r     s    eAkN.C4.OrR   r    scaleendTimer   )
start_timeend_timer*   r   r   r  r	  r*   r+   imagequerypublishedAtclipTypeshowNamer   r   c                    > T(       a  S $ U $ NrL   )rN   is_lives    rO   rP   r     s    V]dNdcdNdrR   regionr   .genrer   )r*   r+   r   r,   r   r   r   r   r   r   r   r   )r(   formatsr   r   r  )!rz   r{   r   r   r   rZ   r   
setdefaultrX   r   report_warningrY   r   r   #_extract_m3u8_formats_and_subtitlesr   _merge_subtitlesall	functoolspartialsorteddictr   r   r   _request_webpager   r	   lenstripr   r   r
   )r]   r0   video_idr   r   r   ra   r  r   subasset	asset_key
asset_typer   r)   fmtssubsbest_video_fmtbase_urlmp4_urlr   r  s                        @rO   r   CBCPlayerIE._real_extract  s   >>#&((+J8*)UW_`  ,gX
 ! DDKMMZ\ 7H&VWY |D9se:L'MM8M +'"QRZQ[[z{($~ '7	 	 tg|cU%CDNw>`&abC  !4!=rBII5z(K  c EeIvJZ'##&G
|SVW`Va$bc,,YLQ[P\\aBbcJt00]KLCf}!EEu%xG F U
dt$ ))$y)A$!-dG&&v3EFGdV5U "V "\Y[   --0.2D2DU2KZae . g8x#7"%6|NSXDY7Z\a%bb((#G,h8S %U ) 4 NN $($&%0$+(,"&$ 4 %e,(,(9(9*k(RV](]fcg  M X  Z!O*]-F,GH&T)B(CD 3%R'  x=Ax{|'D'DQRXbHcHcH
4!C5) -		{;%u{mjt>T=UV+m$.G-HI&
SE:%u-")8k]!C$j=/DdCef$h6fse4"GS1+S&3%@" 
 " '
 	
rR   rL   N)r   r   r   r   r   r   _GEO_COUNTRIESr   r   r   r   rL   rR   rO   r   r      s   G NJVN91.A#%"
 C L1
,
5
 U
 A	

 
 :
 ^
 
 
 67
 J
 
 1
 m
 T
  )!
" wi#
. L6k#%^1$+!@#h
" #F+', :1
+
5
 U
   f	

 
 :
 ^
 
 
 67
 J
 
 1
 m
 T
  )!
" wi#
	0 :6k#%^1$+!@#h
" #F+'0 @1
+
5
 ?
 A	

 
 
 )| 
 y
 	
 :
  T!
" 0#
$ ^$%
& '
( .)
* vh+
< @1
+
5
 R
 A	

 
 
 %%]"K!LM
 ^
 
 )
 n
 J
 
 )
 :
  vh!
, @;d"*y%%/0q 
" ,"F+), @1DA$#y'%c
( @1UA)#y'%h!:."
* % & :mYFvii
rR   r   c                   F    \ rS rSrSrSrSSSS0SS	.S
SSS0SS	./rS rSrg)CBCPlayerPlaylistIEi  zcbc.ca:player:playlistz=https?://(?:www\.)?cbc\.ca/(?:player/)(?!play/)(?P<id>[^?#]+)zKhttps://www.cbc.ca/player/news/TV%20Shows/The%20National/Latest%20Broadcast   r(   z+news/tv shows/the national/latest broadcastzPlaylist no longer available)r0   rB   r2   r3   z+https://www.cbc.ca/player/news/Canada/Northznews/canada/northc                 
  ^ ^^ [         R                  R                  T R                  U5      5      R	                  5       mT R                  UT5      nT R                  SUST5      mUUU 4S jnT R                  U" 5       T5      $ )Nrj   rk   c            	   3   ~   >#    [        TSSU4S jSSS45       H  n TR                  SU  3[        5      v   M      g 7f)Nr   clipsByCategoryc                 *   > U R                  5       T:H  $ r  )lower)krt   playlist_ids     rO   rP   DCBCPlayerPlaylistIE._real_extract.<locals>.entries.<locals>.<lambda>  s    k9QrR   items.r(   r   )r   r\   r   )r"  json_contentr7  r]   s    rO   rJ   2CBCPlayerPlaylistIE._real_extract.<locals>.entries  sJ     (*,QSZ\_ae8  oo(Gz&RT_``s   :=)urllibparseunquoterz   r5  r{   r   r   )r]   r0   r   rJ   r:  r7  s   `   @@rO   r   !CBCPlayerPlaylistIE._real_extract	  sr    ll**4>>#+>?EEG((k:((,gU	a ##GI{;;rR   rL   N	r   r   r   r   r   r   r   r   r   rL   rR   rO   r/  r/    sP    &GQJ\?
 / =%
 /F <rR   r/  c                   8    \ rS rSrSrS/rS	S jrS
S jrS rSr	g)CBCGemBaseIEi  cbcgemr   Nc                 @    U R                  SU 3U=(       d    USS0S9$ )Nz9https://services.radio-canada.ca/ott/catalog/v2/gem/show/devicewebr  rY   )r]   item_idr_   s      rO   _call_show_apiCBCGemBaseIE._call_show_api  s3    ""GyQ!'(E): # < 	<rR   c                 P   U R                  SU=(       d    UUUSSSSSSSUS	.	S
9n[        US[        145      nUS:X  a  U R                  U R                  S9  US:X  a  U R                  SS9  US:w  a3  [        XeR                  S5      SS9n[        U R                   SU 35      eU$ )Nz5https://services.radio-canada.ca/media/validation/v2/hdipadtruejsonr   2desktop)	appCodeconnectionType
deviceTypemultibitrateoutputtechmanifestVersionmanifestTypeidMedia)headersr  	errorCoder   )	countries#   password)methodr   messagez - )delimz said: )
rY   r   intraise_geo_restrictedr-  raise_login_requiredr   rX   r   r   )r]   ra   app_coder_   r[  
media_data
error_codeerror_messages           rO   _call_media_apiCBCGemBaseIE._call_media_api!  s    ((C"(G#"&$ & #& )#
< ) 
 "*{SE.BC
?%%0C0C%D%%Z%8?)*nnY6OW\]M DLL>!HIIrR   c                    S n[        US[        145      nU(       aI  [        R                  " SU5      =n(       a+  [	        UR                  S5      5      nUR                  S5      nSU0[        US[        14S[        14S[        14SSS[        1[        S S	914S
[        14SS[        14SS[        14SS[        14SS[        SS91[        14S.	5      EUUS.E$ )Nr*   z (?P<episode>\d+)\. (?P<title>.+)episodeepisode_numberr0   r+   imagescardr  episodeNumbermetadatar   airDateavailabilityDateratingC)start)	r(   
episode_idr+   r   rn  r   release_timestampr,   	age_limit)rm  r*   )r   rZ   r   matchr
   ri   r   r   r   r   r   )r]   	item_inforn  r*   mobjs        rO   _extract_item_infoCBCGemBaseIE._extract_item_info;  s   Y3%(89bhh'JERRdR(I)>?NJJw'E n
9sen$sen -u5&}zX\G]F^_#2[M"B'k]C&0)>O=P%Q(*<?P>QR((XC5H4IOK\]
' 

 
 	
rR   rL   r  )gemNN)
r   r   r   r   _NETRC_MACHINEr-  rI  rj  r~  r   rL   rR   rO   rB  rB    s    NVN<
4
rR   rB  c                      \ rS rSrSrSrS0 SS_SS_S	S
_SS_SS_SS_SS/_SS_SS_SS_SS
_SS_SS_SS_SS _S!S"_S#S$_S%S&0ES'S(0S).S*0 SS+_SS_S	S,_SS-_SS._SS_SS_SS/_SS_SS,_SS+_SS0_SS/_SS1_SS2_S!S3_S#S4_S%S&0ES'S(0S).S5S6S7./rS8rS9rS9r	S9r
\R                  S: 5       rS; rSBS< jrS= rS> rS? rS@ rSArg9)CCBCGemIEiT  z
gem.cbc.cazbhttps?://gem\.cbc\.ca/(?:media/)?(?P<id>[0-9a-z-]+/s(?P<season>[0-9]+)[a-z][0-9]{2,4})/?(?:[?#]|$)z-https://gem.cbc.ca/media/schitts-creek/s06e01r(   zschitts-creek/s06e01r)   r$   r*   zSmoke Signalsr+   z$md5:929868d20021c924020641769eb3e7f1r   z\re:https://images\.radio-canada\.ca/[^#?]+/cbc_schitts_creek_season_06e01_thumbnail_v01\.jpgr   i,  r   u   Comédie et humourr   Schitt's Creekr   Season 6r   rA   rm  rn  r   rx  r-   20210618r,   i `release_date20200107ry  i ^rz     formatbvr   z-https://gem.cbc.ca/media/schitts-creek/s01e01zschitts-creek/s01e01zThe Cup Runneth Overz$md5:9bca14ea49ab808097530eb05a29e797z\re:https://images\.radio-canada\.ca/[^#?]+/cbc_schitts_creek_season_01e01_thumbnail_v01\.jpgzSeason 1i  20210617i`20151123i WRVz3https://gem.cbc.ca/nadiyas-family-favourites/s01e01Tr   z$fc05b0ee-3865-4400-a3cc-3da82c330c23Nc                 6    U R                  SS SSS0S9S   S   $ )Nz<https://services.radio-canada.ca/ott/catalog/v1/gem/settingszDownloading site settingsrE  rF  r  identityManagementropcrG  r]   s    rO   _ropc_settingsCBCGemIE._ropc_settings  s=    ""JD'%/@ # BBVXX^` 	`rR   c                 P    [        U5      S   [        R                  " 5       -
  S:  $ )Nexpi,  )r   time)r]   tokens     rO   _is_jwt_expiredCBCGemIE._is_jwt_expired  s"    &u-		;cAArR   c                 4   U R                  U R                  S   S U[        SU R                  0UESU R                  S   0E5      S9nUS   U l        US   U l        U R                  R                  U R                  SU R                  U R
                  /5        g )	Nr0   	client_idscopescopes)r   refresh_tokenaccess_token
token_data)	rY   r  r   
_CLIENT_ID_refresh_token_access_tokencachestorer  )r]   
oauth_datanoteresponses       rO   _call_oauth_apiCBCGemIE._call_oauth_api  s    &&&d9KT__MM ,,X6M : '  '7%n5

,,lT=P=PRVRdRd<efrR   c                 D   U R                   (       d4  U R                  R                  U R                  SS S /S9u  U l         U l        U R                   (       a_  U R                  (       aN  U R                  S5        U R                  (       d+  U R                  R                  U R                  S5      U l        g  U R                  SUUS.SS9  g ! [         aI  n[        UR                  [        5      (       a$  UR                  R                  S	:X  a
  [        S
SS9ee S nAff = f)Nr  rg   zUsing cached refresh tokenclaims_tokenr_  )
grant_typeusernamer_  z
Logging in)r  i  z Invalid username and/or passwordTexpected)r  r  loadr  r  write_debug_claims_tokenr  r   
isinstancecauser   status)r]   r  r_  es       rO   _perform_loginCBCGemIE._perform_login  s    ""6:jjoo##\D$< 7F 7I3D!3 4#5#59:%%%)ZZ__T5H5H.%Y"		  ($$" !	 ! "
  	!''9--!''..C2G$%GRVWW	s   7C 
DADDc                    U R                  U R                  5      (       a+   U R                  SU R                  S.5        U R                  $ U R                  $ ! [         at    Su  U l        U l        U R
                  R                  U R                  SS S /5        U R                  S5        U R                  " U R                  5       6    U R                  $ f = f)Nr  )r  r  )NNr  z=Refresh token has been invalidated; retrying with credentials)r  r  r  r  r   r  r  r  r  r  _get_login_infor  s    rO   _fetch_access_tokenCBCGemIE._fetch_access_token  s     2 233	=$$"1%)%8%8&  !!!t!!! " =:D7#T%7

  !4!4lT4LQ##$cd##T%9%9%;<!!!=s   A A0CCc           
         U R                  5       S   (       d  g U R                  (       a   U R                  U R                  5      (       am  U R                  SS SSS0SSU R	                  5        30S9S	   U l        U R
                  R                  U R                  S
U R                  5        U R                  $ U R                  S5        U R                  $ )Nr   zKhttps://services.radio-canada.ca/ott/subscription/v2/gem/Subscriber/profilezDownloading claims tokenrE  rF  AuthorizationzBearer )r  r[  claimsTokenr  zUsing cached claims token)	r  r  r  rY   r  r  r  r  r  r  s    rO   _fetch_claims_tokenCBCGemIE._fetch_claims_token  s    ##%a(!!T%9%9$:L:L%M%M!%!4!4]058I(GD4L4L4N3O*PQ "5 "S Ta"bD JJT00.$BTBTU !!! 89!!!rR   c                   ^
 U R                  U5      R                  SS5      u  m
nU R                  T
5      n[        USSSSSU
4S j[        [        S5      145      n0 nU R                  5       =n(       a  XeS	'   U R                  US
   T
US9S   nU R                  UT
SSSS0S9nU R                  U5        U Hf  n	U	R                  S5      S:X  d  M  U	R                  S5      c  SU	S'   U	R                  S5      c  SU	S'   SU	S   R                  5       ;   d  Ma  SU	S'   Mh     S[        U5      0[        US[        14SSS [        14SS!S[        14S".5      EU R                  U5      ET
T
US#.E$ )$Nr(   r   rn   .lineupsr9  c                    > US   T:H  $ Nr0   rL   rt   ru   r"  s     rO   rP   (CBCGemIE._real_extract.<locals>.<lambda>  s    5X-rR   	item infozx-claims-tokenrZ  )r_   r[  r0   r$   r   rY   )r   r  r   r   r)   m4ar   z	mp4a.40.2descriptiver   
preferencer   r*   structuredMetadatapartofSeasonseasonNumberr  )r   r   r   )r(   rx  r  )_match_valid_urlri   rI  r   r   r   r  rj  _extract_m3u8_formats_remove_duplicate_formatsrX   r5  r
   rZ   r~  )r]   r0   r   
video_infor|  r[  r  m3u8_urlr  fmtr"  s             @rO   r   CBCGemIE._real_extract  s   "&"7"7"<"B"B4"R-((2
 sIsG-sW[5I4J.L M	 3355<5(4$%''i Xw ( HHMO,,hu^R<P - R&&w/Cwwx F*775>)!&CJ778$,$/CM !C$4$:$:$<<(*C%  [7
:"SE*"6YdXe!f/#uE( 
 %%i0
 "
 	
rR   )r  r  r  )zRefreshing access token)r   r   r   r   r   r   r   r  r  r  r  r  cached_propertyr  r  r  r  r  r  r   r   rL   rR   rO   r  r  T  sa   GvJ ?
(
5
 _
 A	

 x
 
 +,
 '
 j
 Q
 
 a
 0
 :
 
  J!
"  #
$ %
( T"/4 ?
(
5
 +
 A	

 x
 '
 Q
 j
 a
 -
 0
 
 +,
 :
 
  J!
"  #
$ %
( T"/2 Ea3Fj 8JNMM` `
B	g,""(
rR   r  c                   J    \ rS rSrSrSrSSSSSS	SS
.S.SSS./rS rS rSr	g)CBCGemPlaylistIEi  zgem.cbc.ca:playlistz]https?://gem\.cbc\.ca/(?:media/)?(?P<id>(?P<show>[0-9a-z-]+)/s(?P<season>[0-9]+))/?(?:[?#]|$)z*https://gem.cbc.ca/media/schitts-creek/s06   zschitts-creek/s06r  r  rA   )r(   r*   r   r   r   r0   playlist_countr2   z$https://gem.cbc.ca/schitts-creek/s06Tr   c              #      #    [        USS 45       H2  nU R                  " SUS    3[        40 U R                  U5      D6v   M4     g 7f)Nr9  c                     US   $ r  rL   rs   s     rO   rP   +CBCGemPlaylistIE._entries.<locals>.<lambda>  s    %rR   zhttps://gem.cbc.ca/media/r0   )r   r\   r  r~  )r]   season_inform  s      rO   _entriesCBCGemPlaylistIE._entries  sR     #K';P1QRG//+GEN+;<h4))'24 4 Ss   AA	c                 j  ^ U R                  U5      R                  SSS5      u  p#mU R                  X2S9n[        USSSU4S j[        [        S	5      145      nU R                  " U R                  U5      U40 [        US
[        14S
[        14S[        14S.5      DS[        US
[        145      0D6$ )Nr(   showr   )r_   rn   .r  c                 &   > US   [        T5      :H  $ )Nr  )rc  )rt   ru   r   s     rO   rP   0CBCGemPlaylistIE._real_extract.<locals>.<lambda>"  s    >*c&k9rR   zseason infor*   r  )r*   r   r   r   )
r  ri   rI  r   r   r   r   r  rZ   r
   )r]   r0   	season_idr  	show_infor  r   s         @rO   r   CBCGemPlaylistIE._real_extract  s    "&"7"7"<"B"B4QY"Z	'''C	"9sI93AW@X/Z [ ##MM+&	B;!C5)"SE*"0;-!@) B $I#/?@B 	BrR   rL   N)
r   r   r   r   r   r   r   r  r   r   rL   rR   rO   r  r    sL    #GqJ <%' 
	 6F 4BrR   r  c                   j    \ rS rSrSrSrSrSSSS0S	.S
SSS0S	.SSSSSSSSSSS.	S.SSS./rS rSr	g)CBCGemContentIEi-  zgem.cbc.ca:contentFz4https?://gem\.cbc\.ca/(?P<id>[0-9a-z-]+)/?(?:[?#]|$)zhttps://gem.cbc.ca/the-tunnel   r(   z
the-tunnelr  zhttps://gem.cbc.ca/summit-72r   z	summit-72z?https://gem.cbc.ca/ski-jumping-nh-individual-womens-final-30086,ski-jumping-nh-individual-womens-final-30086r$   ,Ski Jumping: NH Individual (Women's) - Final$md5:411c07c8a9a4a36344530b0c726bf8ab1  !re:https://[^.]+\.cbc\.ca/.+\.jpgii20260207was_live	r(   r)   r*   r+   r   r   ry  r  live_statusr0   r2   zhttps://gem.cbc.ca/copa-71Tr   c           
        ^ ^ T R                  U5      nT R                  X5      nT R                  X25      S   S   S   mTS   nT R                  SU S35        US:X  ae  [	        TSS	S
S[        S5      145      n[        R                  U5      (       a  T R                  U[        5      $ T R                  SU S3[        5      $ UU 4S jnT R                  U" 5       U5      $ )Nprops	pagePropsr   r   zRouting for content type ""
Standaloneheaderctar   r0   https://gem.cbc.ca/z/s01e01c               3      >#    [        TSSSSS[        S5      1S 145       H  n TR                  U [        5      v   M     g 7f)Nrn   .r  r0   r  c                 >    [         R                  U 5      (       a  U $ S $ r  )r  suitablerM   s    rO   rP   @CBCGemContentIE._real_extract.<locals>.entries.<locals>.<lambda>g  s     0 9 9! < <1F$FrR   )r   r   r\   r  )playlist_urlr   r]   s    rO   rJ   .CBCGemContentIE._real_extract.<locals>.entriesd  sL      ,T3	3@U8V7WFG4 ! ool4DEE	!s   A A)rz   r{   _search_nextjs_datar  r   r   CBCGemOlympicsIEr  r\   r  r   )r]   r0   r_   r   content_typenew_urlrJ   r   s   `      @rO   r   CBCGemContentIE._real_extractS  s    ^^C(
((9''<WEkRSYZM*5l^1EF<'"4%%':O2P1Q*S TG((11w0@AA ??%8G#LhWW	F ##GIz::rR   rL   N)
r   r   r   r   r   IE_DESCr   r   r   r   rL   rR   rO   r  r  -  s    "GGHJ /,
	 .+
	 Q@DA=!+&%

  ,9 FD;rR   r  c                   B    \ rS rSrSrSrSSSSSS	S
SSSS.	S./rS rSrg)r	  in  zgem.cbc.ca:olympicszRhttps?://gem\.cbc\.ca/(?P<id>(?:[0-9a-z]+-)+[0-9]{5,})/s01e(?P<media_id>[0-9]{5,})zIhttps://gem.cbc.ca/ski-jumping-nh-individual-womens-final-30086/s01e30086r  r$   r  r  r  r  r  r  r  r  r  c                 l  ^	 U R                  U5      R                  SS5      u  nm	U R                  U5      n[        USSSSSU	4S j[        [        S5      145      nS	S
S.R                  UR                  S5      5      n[        USS[        1[        45      nUS	:X  a5  U(       a.  U[        R                  " 5       :  a  / nSnU R                  SSS9  O*U R                  T	SU5      S   nU R                  XSUS	:H  S9nUUUUS.[        US[        14S[        14SSS[        14SSS[        14S.5      E$ )Nr(   ra   rn   .r  r9  c                    > US   T:H  $ )NformattedIdMediarL   )rt   ru   ra   s     rO   rP   0CBCGemOlympicsIE._real_extract.<locals>.<lambda>  s    -.(:rR   r  r  r  )	LiveEventReplayrq   rr  ))r   	startDate)replayrs  is_upcoming#This livestream has not yet startedTr  medianetliver0   r$   r   r(   r  r  ry  r*   r+   ro  rp  r  r   )r*   r+   r   r   )r  ri   rI  r   r   r   rX   r   r  raise_no_formatsrj  r  rZ   r   r
   )
r]   r0   r"  r  r|  r  ry  r  r  ra   s
            @rO   r   CBCGemOlympicsIE._real_extract  s   !2237==dJO(((2
 sIsG:C'+BVAW.Y Z	
 # 
 #immF#
$ 	
 )FY\5^ _ )#(9>ORVR[R[R]>]G'K!!"GRV!W++HnhOPUVH00UQ\`iQi0jG &!2	

 9!C5) -u5&}E':}M	' 
 	
rR   rL   Nr@  rL   rR   rO   r	  r	  n  s@    #GfJZ@DA=!+&%

 F#
rR   r	  c                       \ rS rSrSrSrSSSSSS	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SS.	SS0SS.S S!S"S
S#S$S%S&S'S(S).SS0S*S+.S,SS-./rS. rS/rg0)1CBCGemLiveIEi  zgem.cbc.ca:livez1https?://gem\.cbc\.ca/live(?:-event)?/(?P<id>\d+)z$https://gem.cbc.ca/live/920604739687Ottawaz5The live TV channel and local programming from Ottawazmhttps://thumbnails.cbc.ca/maven_legacy/thumbnails/CBC_OTT_VMS/Live_Channel_Static_Images/Ottawa_2880x1620.jpgr  AyqZwxRqh8EHr$   iX20170413r&   )	r*   r+   r   r  r(   r)   ry  r  r.   zLive might have ended)r0   r2   r3   zhttps://gem.cbc.ca/live/4444Tzre:^Ottawa [0-9\-: ]+z/re:https://images.gem.cbc.ca/v1/cbc-gem/live/.*)r(   r)   r  r*   r+   r  r   r   )r0   r2   r   r3   z#https://gem.cbc.ca/live-event/1083510835uS   re:^The National \| Biden’s trip wraps up, Paltrow testifies, Bird flu [0-9\-: ]+u   March 24, 2023 | President Biden’s Ottawa visit ends with big pledges from both countries. Plus, Gwyneth Paltrow testifies in her ski collision trial.iGd20230325)	r(   r)   r  r*   r+   r  r   ry  r  z#https://gem.cbc.ca/live-event/42314 297a9600f554f2258aed01514226a69742314r  z&Women's Soccer - Canada vs New Zealandz$md5:36200e5f1a70982277b5a6ecea86155dzre:https://.+default\.jpgi_f20240725)r(   r)   r  r*   r+   r   ry  r  z#Replay might no longer be available)r0   r1   r2   r   r3   z#https://gem.cbc.ca/live-event/43273r   c                   ^	 U R                  U5      m	U R                  UT	5      nU R                  UT	5      S   S   S   nUR                  S5      (       d7  [	        US5      T	:X  a  US   nO![	        USSU	4S	 j[
        45      =(       d    0 nUR                  S5      nU(       d
  [        S
SS9eUR                  S5      (       a  SOSn[	        US[        145      nUS:X  a5  U(       a.  U[        R                  " 5       :  a  / nSnU R                  SSS9  O+U R                  UST	5      S   nU R                  UT	SUS:H  S9nT	UUUS.[	        US[        14S[        14SS.5      E$ )Nr  r  r   r  )eventr   r*  )freeTv)streams.r9  c                 8   > US   R                  S5      S   T:H  $ )Nr   -r   )	partitionr  s     rO   rP   ,CBCGemLiveIE._real_extract.<locals>.<lambda>  s    5!3!3C!8!;x!GrR   zBCouldn't find video metadata, maybe this livestream is now offlineTr  isVodEnabledr  r  rs  r  r  r  r0   r$   r  r  r*   r+   )ro  rp  r0   )r*   r+   r   )rz   r{   r  rX   r   r   r   r   r  r  rj  r  rZ   )
r]   r0   r   r  video_stream_idr  ry  r  r  r"  s
            @rO   r   CBCGemLiveIE._real_extract  s   >>#&((h7--gx@I+VW]^
 ~~011J(89XE'0
)*0'G7N O URT  %..);< U`df f %/NN>$B$Bj	(i-5QR)#(9>ORVR[R[R]>]G'K!!"GRV!W++O^XVW\]H008UQ\`iQi0jG &!2	


 :!C5) -u56( 

 
	
rR   rL   Nr@  rL   rR   rO   r  r    s    GEJ :!V M($%/ *&
 ,	
  01V(O '-+	
 9o  z(O%/ *
 '-+	
" 95)BE9%/ *	 '-9	
" 9!	
}BFH(
rR   r  c                   ^    \ rS rSrSrSrSSSSSS	S
SSSS.	S.SSSSSSSSSSS.	S./rS rSrg)CBCListenIEi  zcbc.ca:listenzWhttps?://(?:www\.)?cbc\.ca/listen/(?:cbc-podcasts|live-radio)/[\w-]+/[\w-]+/(?P<id>\d+)z|https://www.cbc.ca/listen/cbc-podcasts/1353-the-naked-emperor/episode/16142603-introducing-understood-who-broke-the-internet16142603z/Introducing Understood: Who Broke the Internet?r   z$md5:c605117500084e43f08a950adc6a708c   i@hi5h20250428)	r(   r*   r)   r+   r   r,   ry  r  r-   r  zghttps://www.cbc.ca/listen/live-radio/1-64-the-house/clip/16170773-should-canada-suck-stand-donald-trump16170773z2Should Canada suck up or stand up to Donald Trump?z$md5:7385194f1cdda8df27ba3764b35e7976iW  i&hi@h2025091920250920c                   ^ U R                  U5      mU R                  ST 3TSS9n[        US[        145      nU(       d^  U R	                  S5        U R                  UT5      nU R                  SUST[        S9n[        US	S
SU4S j[        [        S5      145      nST0[        US[        1[        4S[        14S[        14S[        SS914S[        SS914S[        14S.5      E$ )Nz'https://www.cbc.ca/listen/api/v1/clips/FrG   r   z:API failed to return data. Falling back to webpage parsingzwindow\.__PRELOADED_STATE__\s*=zpreloaded stater   )podcastDetailDatashowDetailData.episodesc                 &   > [        US   5      T:H  $ )NclipID)rZ   r  s     rO   rP   +CBCListenIE._real_extract.<locals>.<lambda>E  s    S8-9rR   zepisode datar(   )r   r0   r*   r+   
releasedAtr  r  airdater   )r0   r*   r+   ry  r,   r   )rz   rY   r   r  r  r{   r   r   r   r   r   rZ   r
   )r]   r0   r  r   r   preloaded_stater"  s         @rO   r   CBCListenIE._real_extract7  s)   >>#&&&5hZ@(RW ' YHvv&67 \],,S(;G"//2G=N: 0 7O  7j93AX@Y2[ \D
 (

4&s;!C5) -u5&2[t5L4M%N'+D*A)BC'+7" 

 
	
rR   rL   Nr@  rL   rR   rO   r5  r5    sn    GkJ NFA#!+&%

 yIA#!+&%

F8
rR   r5  ).r  r   r  urllib.parser<  commonr   
networkingr   networking.exceptionsr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r   r   r    r   r/  rB  r  r  r  r	  r  r5  rL   rR   rO   <module>rM     s     	   ! $ -     , > =C2M C2LK
- K
\
<- <D9
= 9
xm
| m
`&B| &BR>;l >;B5
| 5
po
< o
d9
- 9
rR   