
    V|h_                     \   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  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)g)    N   )InfoExtractor   )HEADRequest)	HTTPError)ExtractorErrorfloat_or_noneint_or_none
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)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,   )r/   r0    415a0e3f586113894174dfb31aa5bb1a
2658915080zFly like an eagle!zFEagle equipped with a mini camera flies from the world's tallest tower20150315iU)r.   playlistr1   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)      )r.   r0   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    N/home/james-whalen/.local/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%253DrH   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          rM   _extract_player_initCBCIE._extract_player_inits   s    &&{
K??9-!(+G&&abiajjlmu ' &D "4)JCP..ru||&(()++/116sB@ H:6XNNrP   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[
        R                  " SU5       Vs/ s H  nU R                  XR5      PM     nn/ nS H(  nUR                  [
        R                  " X5      5        M*     UR                  [        U5       V	s/ s H  n	U R                  SU	 3SU	5      PM     sn	5        U R                  Xb[        U5      U R                  U5      5      $ s  snf s  sn	f )Ndefaultztwitter:titler(   z,CBC\.APP\.Caffeine\.initInstance\(({.+?})\);)z%<iframe[^>]+src="[^"]+?mediaId=(\d+)"z<div[^>]+\bid=["\']player-(\d+)zguid["\']\s*:\s*["\'](\d+)rS   rT   )	_match_id_download_webpage_og_search_title_html_search_meta_html_extract_titlerefindallrb   extendr   rZ   playlist_resultr   _og_search_description)
r[   r.   r]   webpager(   r\   rH   	media_idsmedia_id_rer_   s
             rM   _real_extractCBCIE._real_extract   sJ   ^^C(
((9&&w&= 6**?GWVZ*[6,,W5 	
  "zz*Y[bcec %%k>c 	 e 	/K RZZ=>	/
 	&y131 OOj
3[(K13 	4 ##u!5''02 	2e3s   =D4" D9rJ   N)
__name__
__module____qualname____firstlineno__IE_NAME
_VALID_URL_TESTSrb   rt   __static_attributes__rJ   rP   rM   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 2rP   r   c                   @   \ 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.SASB0SC.SySzS{SS|S}SZS0S~SSS/ / 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)r.   r/   r0   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r.   r0   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English Captionsz_https://cbchls.akamaized.net/delivery/news-shows/2024/06/17/NAT_JUN16-00-55-00/NAT_JUN16_cc.vtt)namer.   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.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r.   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   rJ   )_vr   s     rM   rN   *CBCPlayerIE._parse_param.<locals>.<lambda>y  s    &	T@QrP   value)r   rX   any)r[   
asset_datar   s     `rM   _parse_paramCBCPlayerIE._parse_paramx  s"    J3QSZ]`\acf(ghhrP   c                   ^ U R                  U5      nU R                  SU 3U5      nU R                  SUSU5      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 S/9nU(       a  S0U;   a  GM$  U[-        [/        US$   5      S%5      -   nU R1                  [3        U5      US1S2S2S39(       a  UR                  0 UEUS4S5S S S6.E5        GM~  GM  UR                  US$   UU R                  US75      S8:X  a  S9OS S:.5        GM     [        USS;S< S=[5        S>S?914S@[5        S>S?914SA[        14SB.45      n[7        U5      SC:X  a4  USD   R                  SE5      (       d  USD   R                  SF5      (       d  / n0 [        USG[        14SH[        R8                  14SIS$[:        1[=        S SJ914SK[5        S>S?914SSL[        14SM[        14SSN[>        14SSO[4        1U4SP j14SSQ[        14SRSSSA[        14SST[         4SUSSSA[        14SV.5      EUUUUTSW.E$ )XNhttps://www.cbc.ca/player/play/window\.__INITIAL_STATE__\s*=initial statevideocurrentClipmediaassetsc                 6    [        US   5      =(       a    US   $ )Nkeytyper   r   r   s     rM   rN   +CBCPlayerIE._real_extract.<locals>.<lambda>  s    ;qx3H3VQvY3VrP   rB   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_keyr.   r&   _format_sort_fields
streamTypeLive
textTracksc                     [        US   5      $ )Nsrcr   r   s     rM   rN   r     s    ;WXY^W_K`rP   languageundr   label)r.   r   r   r   medianetz!Skipping unsupported asset type "z": zDownloading z JSONcontentTyper   r.   r"   hls)m3u8_idlive)targetc                 B    UR                  S5      S:g  =(       a    US   $ )Nvcodecnonetbr)rV   r   s     rM   rN   r     s    xF!:!Gqx!GrP   c                     U S   $ )Nr   rJ   rK   s    rM   rN   r     s    QuXrP   )r   rR   z(https?://[^?#]+?/)hdntl=zbase urlre   z/live/zChecking for https formatF)errnoterF   z	https-mp4https)r.   	format_idr   manifest_urlacodec	mediaTypeaudior   )r.   r'   r   r   c                 "    [        US   5      S L$ )N	startTime)floatr   s     rM   rN   r     s    eAkN.C4.OrP   r     scaleendTimer   )
start_timeend_timer(   r   r   r   r   r(   r)   imagequerypublishedAtclipTypeshowNamer   r   c                    > T(       a  S $ U $ NrJ   )rL   is_lives    rM   rN   r     s    V]dNdcdNdrP   regionr   .genrer   )r(   r)   r   r*   r   r   r   r   r   r   r   r   )r&   formatsr   r   r   ) rg   rh   _search_jsonr   rX   r   
setdefaultrV   appendreport_warningrW   r   r   #_extract_m3u8_formats_and_subtitlesrn   _merge_subtitlesall	functoolspartialsorteddict_search_regexr   r   _request_webpager   r	   lenstripr   r   r
   )r[   r.   video_idrq   datar   r_   r  r   subasset	asset_key
asset_typer   r'   fmtssubsbest_video_fmtbase_urlmp4_urlr   r   s                        @rM   rt   CBCPlayerIE._real_extract{  s   >>#&((+J8*)UW_`  ,gRRY[[hj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%@" 
 " '
 	
rP   rJ   N)rv   rw   rx   ry   rz   r{   _GEO_COUNTRIESr|   r   rt   r}   rJ   rP   rM   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!:."
* % & :kXFtih
rP   r   c                   B    \ rS rSrSrSrSSSS0S.S	SSS
0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 broadcast)r.   r@   r0   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      $ )Nr   r   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)kr   playlist_ids     rM   rN   DCBCPlayerPlaylistIE._real_extract.<locals>.entries.<locals>.<lambda>  s    k9QrP   items.r&   r   )r   rZ   r   )r  json_contentr(  r[   s    rM   rH   2CBCPlayerPlaylistIE._real_extract.<locals>.entries  sJ     (*,QSZ\_ae8  oo(Gz&RT_``s   :=)urllibparseunquoterg   r&  rh   r  ro   )r[   r.   rq   rH   r+  r(  s   `   @@rM   rt   !CBCPlayerPlaylistIE._real_extract  sr    ll**4>>#+>?EEG((k:((,gU	a ##GI{;;rP   rJ   N	rv   rw   rx   ry   rz   r{   r|   rt   r}   rJ   rP   rM   r   r     sF    &GQJ\?
 =%
F<rP   r   c                   .    \ rS rSrSrS/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   rW   )r[   item_idr]   s      rM   _call_show_apiCBCGemBaseIE._call_show_api
  s3    ""GyQ!'(E): # < 	<rP   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_numberr.   r)   imagescardr   episodeNumbermetadatar   airDateavailabilityDateratingC)start)	r&   
episode_idr)   r   r>  r   release_timestampr*   	age_limit)r=  r(   )r   rX   rl   matchr
   groupr   r   r   r   r   )r[   	item_infor>  r(   mobjs        rM   _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\]
' 

 
 	
rP   rJ   r   )	rv   rw   rx   ry   _NETRC_MACHINEr  r:  rO  r}   rJ   rP   rM   r3  r3    s    NVN<

rP   r3  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CBCGemIEi(  z
gem.cbc.cazRhttps?://gem\.cbc\.ca/(?:media/)?(?P<id>[0-9a-z-]+/s(?P<season>[0-9]+)[a-z][0-9]+)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   r?   r=  r>  r   rH  r+   20210618r*   i `release_date20200107rI  i ^rJ     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 settingsr6  r7  r   identityManagementropcr8  r[   s    rM   _ropc_settingsCBCGemIE._ropc_settingse  s=    ""JD'%/@ # BBVXX^` 	`rP   c                 P    [        U5      S   [        R                  " 5       -
  S:  $ )Nexpi,  )r   time)r[   tokens     rM   _is_jwt_expiredCBCGemIE._is_jwt_expiredk  s"    &u-		;cAArP   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 )	Nr.   	client_idscopescopes)r  refresh_tokenaccess_token
token_data)	rW   rb  r   
_CLIENT_ID_refresh_token_access_tokencachestorerQ  )r[   
oauth_datanoteresponses       rM   _call_oauth_apiCBCGemIE._call_oauth_apin  s    &&&d9KT__MM ,,X6M : '  '7%n5

,,lT=P=PRVRdRd<efrP   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)Nrp  re   zUsing cached refresh tokenclaims_tokenpassword)
grant_typeusernamer}  z
Logging in)rw  i  z Invalid username and/or passwordTexpected)rr  rt  loadrQ  rs  write_debug_claims_tokenry  r   
isinstancecauser   status)r[   r  r}  es       rM   _perform_loginCBCGemIE._perform_loginy  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)Nrn  )r~  rn  )NNrp  z=Refresh token has been invalidated; retrying with credentials)rh  rs  ry  rr  r   rt  ru  rQ  r  r  _get_login_infora  s    rM   _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 tokenr6  r7  AuthorizationzBearer )r   headersclaimsTokenr|  zUsing cached claims token)	r  r  rh  rW   r  rt  ru  rQ  r  ra  s    rM   _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!!!rP   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                  S
T
USSSSSSSSUS   S.	S9nUR                  S5      S:X  a  U R                  S/S9  OuUR                  S5      S:X  a  U R                  SS9  OPUR                  S5      S:w  a;  [        U R                   SUR                  S5       SUR                  S 5       35      eU R                  US!   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     S0[!        U5      0[        US1["        14S2S3S4[         14S2S5S["        14S6.5      EU R%                  U5      ET
T
US7.E$ )8Nr&   r   content.lineupsr*  c                    > US   T:H  $ Nr.   rJ   r   r   r  s     rM   rN   (CBCGemIE._real_extract.<locals>.<lambda>  s    5X-rP   z	item infozx-claims-token5https://services.radio-canada.ca/media/validation/v2/gemhdipadtruejsonr   2desktopidMedia)	appCodeconnectionType
deviceTypemultibitrateoutputtechmanifestVersionmanifestTyper  )r  r   	errorCoder   r   )	countries#   r}  )methodr   z said: z - messager.   r"   r   )r   r   r   r   r'   m4ar   z	mp4a.40.2descriptiver   
preferencer   r(   structuredMetadatapartofSeasonseasonNumberr  )r   r   r   )r&   rH  r  )_match_valid_urlrL  r:  r   r   r   r  rW   rV   raise_geo_restrictedraise_login_requiredr   rz   _extract_m3u8_formats_remove_duplicate_formatsr&  r
   rX   rO  )r[   r.   r   
video_inforM  r  r|  	m3u8_infor  fmtr  s             @rM   rt   CBCGemIE._real_extract  sw   "&"7"7"<"B"B4"R-((2
 sIsG-sW[5I4J.L M	 3355<5(4$%''Cg "&$ & #& )$Y/
. ( 	 ==%*%%%7]];'2-%%Z%8]];'1, DLL>{9S8TTWXaXeXefoXpWq!rss,,ehu^UWDX - Z&&w/Cwwx F*775>)!&CJ778$,$/CM !C$4$:$:$<<(*C%  [7
:"SE*"6YdXe!f/#uE( 
 %%i0
 "
 	
rP   )rs  r  rr  )zRefreshing access token)rv   rw   rx   ry   rz   r{   r|   rq  rr  rs  r  r
  cached_propertyrb  rh  ry  r  r  r  rt   r}   rJ   rP   rM   rS  rS  (  sa   GfJ ?
(
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,"";
rP   rS  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/s06rU  rT  r?   )r&   r(   r   r   r   )r.   playlist_countr0   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)Nr*  c                     US   $ r  rJ   r   s     rM   rN   +CBCGemPlaylistIE._entries.<locals>.<lambda>  s    %rP   zhttps://gem.cbc.ca/media/r.   )r   rZ   rS  rO  )r[   season_infor=  s      rM   _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]   r  .r  c                 &   > US   [        T5      :H  $ )Nr  )int)r   r   r   s     rM   rN   0CBCGemPlaylistIE._real_extract.<locals>.<lambda>	  s    >*c&k9rP   zseason infor(   r  )r(   r   r   r   )
r  rL  r:  r   r   r   ro   r  rX   r
   )r[   r.   	season_idr  	show_infor  r   s         @rM   rt   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rP   rJ   N)
rv   rw   rx   ry   rz   r{   r|   r  rt   r}   rJ   rP   rM   r  r    sL    #GqJ <%' 
	 6F 4BrP   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S0r	g1)2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   live_statusr&   r'   rI  rW  r,   zLive might have ended)r.   r0   r1   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   )r.   r0   r   r1   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   rI  rW  z#https://gem.cbc.ca/live-event/42314 297a9600f554f2258aed01514226a69742314was_livez&Women's Soccer - Canada vs New Zealandz$md5:36200e5f1a70982277b5a6ecea86155dzre:https://.+default\.jpgi_f20240725)r&   r'   r  r(   r)   r   rI  rW  z#Replay might no longer be available)r.   r/   r0   r   r1   z#https://gem.cbc.ca/live-event/43273r   r   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  O2U R                  ST	SSSUSSSSS.S9nU R                  US   T	SUS:H  S9nT	UUUS .[	        US![        14S"[        14S#S$.5      E$ )%Nprops	pagePropsr  formattedIdMedia)eventr   r  )freeTv)streams.r*  c                 8   > US   R                  S5      S   T:H  $ )Nr   -r   )	partitionr  s     rM   rN   ,CBCGemLiveIE._real_extract.<locals>.<lambda>h  s    5!3!3C!8!;x!GrP   zBCouldn't find video metadata, maybe this livestream is now offlineTr  isVodEnabledr  r   rC  is_upcomingz#This livestream has not yet startedr  medianetliver  r  r  r  r   r  )r  r  r  r  r  r  r  r  r   r.   r"   )r   )r&   r  r  rI  r(   r)   )r?  r@  r.   )r(   r)   r   )rg   rh   _search_nextjs_datarV   r   r   r   r   rf  raise_no_formatsrW   r  rX   )
r[   r.   rq   r  video_stream_idr  rI  r  stream_datar  s
            @rM   rt   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--G-&*"(.$*$!$-	Z . 
K 00E"He+:R 1 TG &!2	


 :!C5) -u56( 

 
	
rP   rJ   N)
rv   rw   rx   ry   rz   r{   r|   r  rt   r}   rJ   rP   rM   r  r    s   GEJ :!V M($%/ *&
 ,	
  01V(O '-+	
 9o  z(O%/ *
 '-+	
" 95)BE9%/ *	 '-9	
" 9!	
}BFF VN3
rP   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*   rI  rW  r+   )r.   r0   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/FrE   r  z:API failed to return data. Falling back to webpage parsingzwindow\.__PRELOADED_STATE__\s*=zpreloaded state)transform_source)podcastDetailDatashowDetailData.episodesc                 &   > [        US   5      T:H  $ )NclipID)rX   r  s     rM   rN   +CBCListenIE._real_extract.<locals>.<lambda>  s    S8-9rP   zepisode datar&   )r   r.   r(   r)   
releasedAtr   r   airdater   )r.   r(   r)   rI  r*   r   )rg   rW   r   r  r  rh   r  r   r   r   r   rX   r
   )r[   r.   rx  r  rq   preloaded_stater  s         @rM   rt   CBCListenIE._real_extract  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" 

 
	
rP   rJ   Nr1  rJ   rP   rM   r  r    sn    GkJ NFA#!+&%

 yIA#!+&%

F8
rP   r  )*r
  rl   rf  urllib.parser-  commonr   
networkingr   networking.exceptionsr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r   r   r   r   r   r3  rS  r  r  r  rJ   rP   rM   <module>r     s     	   ! $ -    ( > =w2M w2tI
- I
X
<- <@
= 
D@
| @
F&B| &BR{
= {
|9
- 9
rP   