
    Ği^                        d dl Z d dlZd dlZd dlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZm Z m!Z!  G d	 d
e          Z" G d de          Z# G d de          Z$ G d de          Z% G d de%          Z& G d de%          Z' G d de          Z( G d de          Z)dS )    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                       e Zd ZdZdZddddddd	d
ddddddddddddddddddddddddddddd d!d"dd#d$d%d&dd'd(d)d*dd+d,d-d.dd'd(gdd/d0d1d2d3d4d5d6gZd7 Zd8 Zd9S ):CBCIEz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.   r/    415a0e3f586113894174dfb31aa5bb1a
2658915080zFly like an eagle!zFEagle equipped with a mini camera flies from the world's tallest tower20150315iU)r-   playlistr0   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-   r/   playlist_mincountc                    |                      ||t                    }|                    d          }|s|d         }|                     d| d|d          }|rt	          |d t
                    }|sD|                     d|z   |          d	         d
         d                             d          d         }|                     d| d|          S )NmediaIdclipIdzLhttp://tpfeed.cbc.ca/f/ExhSPC/vms_5akSXx4Ng_Zn?byCustomValue={:mpsReleases}{}Ffatalc                 *    | d         d         d         S )Nentriesr   guid xs    YC:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/extractor/cbc.py<lambda>z,CBCIE._extract_player_init.<locals>.<lambda>|   s    1Y<?63J     z\http://feed.theplatform.com/f/h9dtGB/punlNGjMlc1F?fields=id&byContent=byReleases%3DbyId%253DrG   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          rL   _extract_player_initzCBCIE._extract_player_inits   s   &&{J
KK??9-- 
	@!(+G&&mbimmmu ' & &D  Q"4)J)JCPP @..ru|| &(()++/116sB@ 6H66XNNNrN   c                    	                       |          	                     |	          }                     |d           p-                     d|dd           p                     |          }                     d|dd|          }                     d|d	i t          	          }	 fd
t          j	        d|          D             }g }dD ]*}|
                    t          j	        ||                     +|
                    t          |dddddd ddt          hf	                     t          |ddt          hf          x}r|                    |           |
                     fdt          |          D                                             |	t!          |                               |                    S )Ndefaultztwitter:titler'   u'   ^(?P<title>.+?)(?:\s*[|–-]\s*CBC.*)?$zcleaned title)grouprc   window\.__INITIAL_STATE__\s*=initial state)rc   transform_sourcec                 <    g | ]}                     |          S rI   )r`   ).0rZ   r[   rY   s     rL   
<listcomp>z'CBCIE._real_extract.<locals>.<listcomp>   s?     e e e %%k:>>e e erN   z,CBC\.APP\.Caffeine\.initInstance\(({.+?})\);)z%<iframe[^>]+src="[^"]+?mediaId=(\d+)"z<div[^>]+\bid=["\']player-(\d+)zguid["\']\s*:\s*["\'](\d+)detailcontentbody.c                     |d         dk    S )Ntypepolopoly_mediarI   _vs     rL   rM   z%CBCIE._real_extract.<locals>.<lambda>   s    6&66 rN   sourceIdapp	contentIdc                 D    g | ]}                     d | d|          S )rQ   rR   )rX   )ri   r]   rY   s     rL   rj   z'CBCIE._real_extract.<locals>.<listcomp>   sB     3 3 3 OO333[(KK3 3 3rN   )	_match_id_download_webpage_og_search_title_html_search_meta_html_extract_title_search_regex_search_jsonr   refindallextendr   rV   appendr   playlist_resultr   _og_search_description)
rY   r-   webpager'   datarG   	media_idsmedia_id_re
content_idr[   s
   `        @rL   _real_extractzCBCIE._real_extract   sP   ^^C((
((j99&&w&== 6**?GWVZ*[[6,,W55 	 ""6?'5 # B B   ,gZj ! R Re e e e e!z*Y[bcce e e 	/ 	? 	?K RZW==>>>>dii66	:PSu-V W W 	X 	X 	X &dUK#,GHHH: 	)Z((( 3 3 3 3&y113 3 3 	4 	4 	4 ##Zu!5!5''002 2 	2rN   N)__name__
__module____qualname__IE_NAME
_VALID_URL_TESTSr`   r   rI   rN   rL   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 O O  2  2  2  2  2rN   r   c                   <   e Zd ZdZdZdgZ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 g d!d"d#d$gd%d&d'd(d)d$d*d+d,d-d.d/d0d1gd2d3d4dd5d6d7d8d9g d:d;d<gd<g d=d/d>gd?d@dAidBdCdi ddDddddddEddddddd g d!d"d#d$gd%d&d'd(d)d$d*d+d,d-d.d/d0d1gd2dFdGdd5d6d7d8d9g d:d;d<gd<g d=d/d>gd?d@dAidBdHdIi ddJddddKddLddMd!dNdOdPdQdRdSgiddTd dUddVd#g dWd)dXd%dYgd'dZd.d[d0d>gd2d\d]i dd^dddd_dd`ddad!dbdOdcdddedfgiddgd g d#dhd)dYd%did'dZd.d/ddjd0d>gd2dkdlddmdndodpdqdrdsdtg g dugg dvdZdwdxd@dAidydzd{d|dd}d~dYd/ddddg g dg ddd2dddddddd/ddddg d>gd>dgdddd2dddddddddgZd Zd ZdS )CBCPlayerIEz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.   r/   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-   r/   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)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Video no longer available)r-   r/   r0   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                 J    t          |dfddt          ht          f          S )Nr   c                     |d         k    S )Nr   rI   )rr   rs   r   s     rL   rM   z*CBCPlayerIE._parse_param.<locals>.<lambda>  s    &	T@Q rN   value)r   rV   any)rY   
asset_datar   s     `rL   _parse_paramzCBCPlayerIE._parse_param  s.    J3Q3Q3Q3QSZ]`\acf(ghhhrN   c                    |                      |          }|                     d| |          }|                     d|d|t                    d         d         }t	          |ddd	 f          }|s6t	          |d
t
          hf          x}rddt          d| dddi          |ddS t	          |ddt
          hf          dk    g i }}t	          |ddd f          D ]\}	|                    |	                    d          pdg           	                    |	d         |	                    d          d           ]|D ]}
|
d         }|
d         }|dk    r| 
                    d| d |            5|                     ||d!| d"          }t          |                     |d#                    }|d$k    r6|                     |d%         |d&d'(          \  }}|                    |           |s|                     ||)           s|st	          |d* t"          t%          j        t(          d+ ,          hd-t*          hf          pi }|                     d.|                    d%          d/d 0          }|rd1|v rB|t/          t1          |d%                   d&          z   }|                     t5          |          |d2d3d34          r|	                    i ||d5d6d d d7           |	                    |d%         ||                     |d8          d9k    rd:nd d;           t	          |dd<d= d>t7          d?@          hfdAt7          d?@          hfdBt
          hfdCf          }t9          |          dDk    r8|dE                             dF          s|dE                             dG          sg }i t	          |dHt
          hfdIt
          j        hfdJd%t<          ht?          d K          hfdLt7          d?@          hfddMt
          hfdNt
          hfddOt@          hfddPt6          hfdQhfddRt
          hfdSdTdBt
          hfddUt"          fdVdTdBt
          hfdW          ||||dXS )YNhttps://www.cbc.ca/player/play/re   rf   rg   videocurrentClipmediaassetsc                 <    t          |d                   o|d         S )Nkeyro   r   rq   s     rL   rM   z+CBCPlayerIE._real_extract.<locals>.<lambda>  s    ;qx3H3H3VQvY rN   rA   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                 ,    t          |d                   S )Nsrcr   rq   s     rL   rM   z+CBCPlayerIE._real_extract.<locals>.<lambda>  s    ;WXY^W_K`K` rN   languageundr   label)r-   r   r   ro   medianetz!Skipping unsupported asset type "z": zDownloading z JSONcontentTyper   r-   r!   hls)m3u8_idlive)targetc                 D    |                     d          dk    o|d         S )Nvcodecnonetbr)rT   rq   s     rL   rM   z+CBCPlayerIE._real_extract.<locals>.<lambda>  s    xF!:!Gqx rN   c                     | d         S )Nr   rI   rJ   s    rL   rM   z+CBCPlayerIE._real_extract.<locals>.<lambda>  s
    QuX rN   )r   rP   z(https?://[^?#]+?/)hdntl=zbase urlrb   z/live/zChecking for https formatF)errnoterE   z	https-mp4https)r-   	format_idr   manifest_urlacodec	mediaTypeaudior   )r-   r&   r   r   c                 0    t          |d                   d uS )N	startTime)floatrq   s     rL   rM   z+CBCPlayerIE._real_extract.<locals>.<lambda>  s    eAkN.C.C4.O rN   r     scaleendTimer   )
start_timeend_timer'   r   r   r   r   r'   r(   imagequerypublishedAtclipTypeshowNamer   r   c                     rd n| S NrI   )rK   is_lives    rL   rM   z+CBCPlayerIE._real_extract.<locals>.<lambda>  s    V]Ndddcd rN   regionr   .genrer   )r'   r(   r   r)   r   r   r   r   r   r   r   r   )r%   formatsr   r   r	  )!rx   ry   r~   r   r   rV   r   
setdefaultrT   r   report_warningrU   r   r   #_extract_m3u8_formats_and_subtitlesr   _merge_subtitlesall	functoolspartialsorteddictr}   r   r   _request_webpager   r	   lenstripr   r   r
   )rY   r-   video_idr   r   r   r]   r  r   subasset	asset_key
asset_typer   r&   fmtssubsbest_video_fmtbase_urlmp4_urlr   r	  s                        @rL   r   zCBCPlayerIE._real_extract  s   >>#&&(()U8)U)UW_``  ,gX
 ! D DDKMMZ\ 7H&V&VWY Y  	|D9se:L'M'MM8 	 +'"{RZ{{{($~  '7	 	 	 tg|cU%CDDNw>`>`&abb 	 	C  !4!4!=rBBII5z((K K    
  *	 *	EeIvJZ''##$b
$b$bW`$b$bccc,,YBbQ[BbBbBbccJt00]KKLLCf}}!EEu%xG F U U
dt$$$  B))$y)AAA $ !-dGG&v3E3EFFFGdV5U "V "V "\Y[   --0.2D2DU2K2KZae . g g 8x#7#7"%6|NSXDY7Z7Z\a%b%bb((#G,,h8S %U ) 4 4 
 NN $($&%0$+(,"&$ $ $    %e,(,(9(9*k(R(RV](](]ffcg         Z!O!O*]-F-F-F,GH&T)B)B)B(CD 3%R R'   x==Ax{|'D'DQRXbHcHcH
4!C5) -	{;%u{mjt>T>T>T=UV+m$.G.G.G-HI&
SE:%u-")8k]!C$j=/DdDdDdDdCef$h6fse4"GS1+S&3%@" "  
 " '
 
 
 	
rN   N)	r   r   r   r   r   _GEO_COUNTRIESr   r   r   rI   rN   rL   r   r      s1       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TT!
" 0#
$ ^$%
& '
( .)
* vh+
 < @1
+
5
 R
 A	

 
 
 %%]"K"K!LM
 ^
 
 )
 n
 J
 
 )
 :
  vh!
 , @;d"*y%%/0qqq 
 
" ,"F+) , @1DA$#y'%ccc
 
 ( @1UA)#y'%h!:."
 
 * %  &  : mYFvi i ii
 i
 i
 i
 i
rN   r   c                   @    e Zd ZdZdZddddiddd	ddd
iddgZd ZdS )CBCPlayerPlaylistIEz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)r-   r?   r/   r0   z+https://www.cbc.ca/player/news/Canada/Northznews/canada/northc                 6    t           j                                                 |                                                                         |          }                     d|d           fd}                      |                      S )Nre   rf   c            	   3      K   t          ddfddddf          D ]"}                     d|  t                    V  #d S )Nr   clipsByCategoryc                 4    |                                  k    S r  )lower)krr   playlist_ids     rL   rM   zDCBCPlayerPlaylistIE._real_extract.<locals>.entries.<locals>.<lambda>  s    k9Q rN   items.r%   r   )r   rX   r   )r  json_contentr-  rY   s    rL   rG   z2CBCPlayerPlaylistIE._real_extract.<locals>.entries  sy      (*,Q,Q,Q,QSZ\_ae8   a a oo&R&R&RT_``````a arN   )urllibparseunquoterx   r+  ry   r~   r   )rY   r-   r   rG   r/  r-  s   `   @@rL   r   z!CBCPlayerPlaylistIE._real_extract  s    l**4>>#+>+>??EEGG((k::((,gU U	a 	a 	a 	a 	a 	a 	a ##GGII{;;;rN   Nr   r   r   r   r   r   r   rI   rN   rL   r%  r%    sv        &GQJ\?
 /  =%
 / F < < < < <rN   r%  c                   &    e Zd ZdZdgZddZd ZdS )CBCGemBaseIEcbcgemr   Nc                 @    |                      d| |p|ddi          S )Nz9https://services.radio-canada.ca/ott/catalog/v2/gem/show/devicewebr  rU   )rY   item_idr[   s      rL   _call_show_apizCBCGemBaseIE._call_show_api  s9    ""QQQ!'(E): # < < 	<rN   c                    d }t          |dt          hf          }|rNt          j        d|          x}r7t	          |                    d                    }|                    d          }d|it          |dt          hfdt          hfdt          hfdddt          ht          d 	          hfd
t          hfddt          hfddt          hfddt          hfddt          d          ht          hfd	          ||dS )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   rV   r   matchr
   rd   r   r   r   r   r   )rY   	item_infor?  r'   mobjs        rL   _extract_item_infozCBCGemBaseIE._extract_item_info  s9   Y3%(899 	(bh'JERRRd 	((I)>)>??NJJw''E n
9sen$sen -u5&}zX\G]G]G]F^_#2[M"B'k]C&0)>O=P%Q(*<?P>QR((XC5H5H5H4IOK\]
' 
' 
 

 
 
 
 	
rN   r  )r   r   r   _NETRC_MACHINEr#  r<  rO  rI   rN   rL   r5  r5    sC        NVN< < < <

 
 
 
 
rN   r5  c                   t   e Zd ZdZdZdi dddddd	d
dddddddgdddddddd	ddddddddd d!d"d#d$d%id&d'id(d)i dd*dddd+d
d,dd-dddddd.dddd+dd*dd/ddgdd0dd1d d2d"d3d$d%id&d'id(d4d5d6gZd7Zd8Zd8Zd8Z	e
j        d9             Zd: ZdAd<Zd= Zd> Zd? Zd@ Zd8S )BCBCGemIEz
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   rI  r*   20210618r)   i `release_date20200107rJ  i ^rK     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                 P    |                      dd dddi          d         d         S )Nz<https://services.radio-canada.ca/ott/catalog/v1/gem/settingszDownloading site settingsr8  r9  r  identityManagementropcr:  rY   s    rL   _ropc_settingszCBCGemIE._ropc_settingsu  sC    ""JD'%/@ # B BBVXX^` 	`rN   c                 \    t          |          d         t          j                    z
  dk     S )Nexpi,  )r   time)rY   tokens     rL   _is_jwt_expiredzCBCGemIE._is_jwt_expired{  s%    &&u-	;cAArN   Refreshing access tokenc                 &   |                      | j        d         d |t          d| j        i|d| j        d         i                    }|d         | _        |d         | _        | j                            | j        d| j        | j        g           d S )	Nr-   	client_idscopescopes)r   refresh_tokenaccess_token
token_data)	rU   ra  r   
_CLIENT_ID_refresh_token_access_tokencachestorerP  )rY   
oauth_datanoteresponses       rL   _call_oauth_apizCBCGemIE._call_oauth_api~  s    &&&d9KT_MM ,X6M M : : '   '7%n5
,lT=PRVRd<efffffrN   c                    | j         s1| j                            | j        dd d g          \  | _         | _        | j         rJ| j        rC|                     d           | j        s%| j                            | j        d          | _        d S 	 |                     d||dd           d S # t          $ rA}t          |j
        t                    r!|j
        j        d	k    rt          d
d           d }~ww xY w)Nrn  rb   zUsing cached refresh tokenclaims_tokenpassword)
grant_typeusernamerz  z
Logging in)ru  i  z Invalid username and/or passwordTexpected)rp  rr  loadrP  rq  write_debug_claims_tokenrw  r   
isinstancecauser   status)rY   r|  rz  es       rL   _perform_loginzCBCGemIE._perform_login  s<   " 	I6:joo#\D$< 7F 7I 7I3D!3  	4#5 	9:::% Z%)Z__T5H.%Y%Y"F		  ($$" " !	 ! " " " " "
  	 	 	!'9-- X!'.C2G2G$%GRVWWWW	s   B( (
C32<C..C3c                 h   |                      | j                  r	 |                     d| j        d           ns# t          $ rf d\  | _        | _        | j                            | j        dd d g           |                     d            | j	        | 
                                  Y nw xY w| j        S )Nrl  )r{  rl  )NNrn  z=Refresh token has been invalidated; retrying with credentials)rf  rq  rw  rp  r   rr  rs  rP  r  r  _get_login_infor`  s    rL   _fetch_access_tokenzCBCGemIE._fetch_access_token  s     233 
	=	=$$"1%)%8& &     " = = =:D7#T%7
  !4lT4LQQQ##$cddd##T%9%9%;%;<<<<	= !!s   : A-B*)B*c           
      ~   |                                  d         sd S | j        r|                     | j                  re|                     dd dddidd|                                  i          d	         | _        | j                            | j        d
| j                   n|                     d           | j        S )Nr   zKhttps://services.radio-canada.ca/ott/subscription/v2/gem/Subscriber/profilezDownloading claims tokenr8  r9  AuthorizationzBearer )r  headersclaimsTokenry  zUsing cached claims token)	r  r  rf  rU   r  rr  rs  rP  r  r`  s    rL   _fetch_claims_tokenzCBCGemIE._fetch_claims_token  s    ##%%a( 	4! 	:T%9%9$:L%M%M 	:!%!4!4]058I(*PD4L4L4N4N*P*PQ "5 "S "S Ta"bD JT0.$BTUUUU8999!!rN   c                   
 |                      |                              dd          \  
}|                     
          }t          |ddddd
fdt          t          d          hf          }i }|                                 x}r||d	<   |                     d

|dddddddd|d         d	          }|                    d          dk    r| 	                    dg           n|                    d          dk    r| 
                    d           n[|                    d          dk    rBt          | j         d|                    d           d|                    d                      |                     |d!         
d"dd#d$i%          }|                     |           |D ]p}	|	                    d&          d'k    rU|	                    d(          d)|	d(<   |	                    d*          d+|	d*<   d,|	d-                                         v rd.|	d/<   qd0t!          |          it          |d1t"          hfd2d3d4t           hfd2d5dt"          hfd6          |                     |          

|d7S )8Nr%   r   rl   .lineupsr.  c                     |d         k    S Nr-   rI   rr   rs   r  s     rL   rM   z(CBCGemIE._real_extract.<locals>.<lambda>  s    5X- rN   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#   rz  )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%   rI  r  )_match_valid_urlrd   r<  r   r   r   r  rU   rT   raise_geo_restrictedraise_login_requiredr   r   _extract_m3u8_formats_remove_duplicate_formatsr+  r
   rV   rO  )rY   r-   r   
video_inforM  r  ry  	m3u8_infor  fmtr  s             @rL   r   zCBCGemIE._real_extract  s   "&"7"7"<"<"B"B4"R"R-((22
 sIsG----sW[5I5I4J.L M M	 33555< 	5(4G$%''Cg "&$ & #& )$Y/
. 
. (  	 ==%%**%%%7777]];''2--%%Z%8888]];''1,, DL!r!r{9S9S!r!rXaXeXefoXpXp!r!rsss,,ehu^UWDX - Z Z&&w/// 
	+ 
	+Cwwx  F**775>>)!&CJ778$$,$/CM !C$4$:$:$<$<<<(*C% [77
:"SE*"6YdXe!f/#uE( (  
 %%i00
 "
 
 
 	
rN   )rg  )r   r   r   r   r   r   ro  rp  rq  r  r  cached_propertyra  rf  rw  r  r  r  r   rI   rN   rL   rR  rR  8  s       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 B B	g 	g 	g 	g  ," " "" " ";
 ;
 ;
 ;
 ;
rN   rR  c                   D    e Zd ZdZdZdddddddd	d
dddgZd Zd ZdS )CBCGemPlaylistIEz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/s06rT  rS  r>   )r%   r'   r   r   r   )r-   playlist_countr/   z$https://gem.cbc.ca/schitts-creek/s06Tr   c              #      K   t          |dd f          D ]4} | j        d|d          t          fi |                     |          V  5d S )Nr.  c                     |d         S r  rI   rq   s     rL   rM   z+CBCGemPlaylistIE._entries.<locals>.<lambda>  s
    % rN   zhttps://gem.cbc.ca/media/r-   )r   rX   rR  rO  )rY   season_infor>  s      rL   _entrieszCBCGemPlaylistIE._entries  s      #K';P;P1QRR 	4 	4G!$/<GEN<<h4 4))'224 4 4 4 4 4	4 	4rN   c                    |                      |                              ddd          \  }}|                     ||          }t          |dddfdt          t          d	          hf          } | j        |                     |          |fi t          |d
t          hfd
t          hfdt          hfd          dt          |d
t          hf          iS )Nr%   showr   )r[   rl   .r  c                 6    |d         t                    k    S )Nr  )int)rr   rs   r   s     rL   rM   z0CBCGemPlaylistIE._real_extract.<locals>.<lambda>  s    >*c&kk9 rN   zseason infor'   r  )r'   r   r   r   )
r  rd   r<  r   r   r   r   r  rV   r
   )rY   r-   	season_idr  	show_infor  r   s         @rL   r   zCBCGemPlaylistIE._real_extract  s   "&"7"7"<"<"B"B4QY"Z"Z	4'''CC	"9sI99993AWAW@X/Z [ [ $t#MM+&&	B B;!C5)"SE*"0;-!@) )  B B $I#/?@@B B B 	BrN   N)r   r   r   r   r   r   r  r   rI   rN   rL   r  r    s        #GqJ <%' 
 
	  6 F 4 4 4B B B B BrN   r  c                       e Zd ZdZdZddddddd	d
ddd	ddddd	ddddddddi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id)d*d+dd,gZd-gZd. Zd/S )0CBCGemLiveIEz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&   rJ  rV  r+   zLive might have ended)r-   r/   r0   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-   r/   r   r0   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   rJ  rV  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   rJ  rV  z#Replay might no longer be available)r-   r.   r/   r   r0   z#https://gem.cbc.ca/live-event/43273r   r   c                 P  	 |                      |          	|                     |	          }|                     |	          d         d         d         }|                    d          s;t	          |d          	k    r	|d         }nt	          |dd	fd	t
          f          pi }|                    d          }|st          d
d          |                    d          rdnd}t	          |dt          hf          }|dk    r5|r3|t          j                    k    rg }d}| 	                    dd           nD| 
                    d	ddd|ddddd          }|                     |d         	d|dk              }	|||d t	          |d!t          hfd"t          hfd#d$          S )%Nprops	pagePropsr   formattedIdMedia)eventr   r  )freeTv)streams.r.  c                 N    |d                              d          d         k    S )Nr   -r   )	partitionr  s     rL   rM   z,CBCGemLiveIE._real_extract.<locals>.<lambda>x  s#    5!3!3C!8!8!;x!G rN   zBCouldn't find video metadata, maybe this livestream is now offlineTr}  isVodEnabledr  r	  rD  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  rJ  r'   r(   )r@  rA  r-   )r'   r(   r   )rx   ry   _search_nextjs_datarT   r   r   r   r   rd  raise_no_formatsrU   r  rV   )
rY   r-   r   r  video_stream_idr  rJ  r  stream_datar  s
            @rL   r   zCBCGemLiveIE._real_extractl  sG   >>#&&((h77--gx@@I+VW]^
 ~~011 	UJ(899XEE'0

)*0'GGGG7N O O URT  %..);<< 	f U`df f f f %/NN>$B$BQjj	(i-5QRR)##(9#>ORVR[R]R]>]>]G'K!!"GRV!WWWW--G-&*"(.$*$!$-	Z 	Z . 
 
K 00E"He+:R 1 T TG &!2	

 


 :!C5) -u56( (  

 
	
rN   N)r   r   r   r   r   r   r#  r   rI   rN   rL   r  r  $  sN       GEJ :!V M($%/ *&
 
 ,	
 	
  01V(O  '-+	
 	
 9o  z(O%/ *
 
 '-+	
 	
" 95)BE9%/ *	 	 '-9	
 	
" 9!	
 	
}BFF VN3
 3
 3
 3
 3
rN   r  c                   X    e Zd ZdZdZddddddd	d
ddd	dddddddddddd	dgZd ZdS )CBCListenIEz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)   rJ  rV  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                 J   |                      |          |                     d d          }t          |dt          hf          }|sv|                     d           |                     |          }|                     d|dt                    }t          |d	d
dfdt          t          d          hf          }dit          |dt          ht          fdt          hfdt          hfdt          d          hfdt          d          hfdt          hfd          S )Nz'https://www.cbc.ca/listen/api/v1/clips/FrD   r   z:API failed to return data. Falling back to webpage parsingzwindow\.__PRELOADED_STATE__\s*=zpreloaded stater   )podcastDetailDatashowDetailData.episodesc                 6    t          |d                   k    S )NclipID)rV   r  s     rL   rM   z+CBCListenIE._real_extract.<locals>.<lambda>  s    S8--9 rN   zepisode datar%   )r   r-   r'   r(   
releasedAtr   r   airdater   )r-   r'   r(   rJ  r)   r   )rx   rU   r   r  r  ry   r~   r   r   r   r   rV   r
   )rY   r-   rv  r   r   preloaded_stater  s         @rL   r   zCBCListenIE._real_extract  sr   >>#&&&&@h@@(RW ' Y YHvv&677 	\ \]]],,S(;;G"//2G=N: 0 7 7O  7j99993AXAX@Y2[ \ \D
 (

4&s;!C5) -u5&2[t5L5L5L4M%N'+D*A*A*A)BC'+7" "  

 
	
rN   Nr3  rI   rN   rL   r  r    s        GkJ NFA#!+&%

 

  yIA#!+&%

 

 F8
 
 
 
 
rN   r  )*r  r   rd  urllib.parser0  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%  r5  rR  r  r  r  rI   rN   rL   <module>r     s       				      ! ! ! ! ! ! $ $ $ $ $ $ - - - - - -                                       ( > = = = = = = = = =C2 C2 C2 C2 C2M C2 C2 C2LK
 K
 K
 K
 K
- K
 K
 K
\
< < < < <- < < <D
 
 
 
 
= 
 
 
D@
 @
 @
 @
 @
| @
 @
 @
F&B &B &B &B &B| &B &B &BR{
 {
 {
 {
 {
= {
 {
 {
|9
 9
 9
 9
 9
- 9
 9
 9
 9
 9
rN   