
    VGh}                     F   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(y)    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e fd7       Zd8 Zd9 Z	 xZ
S ):CBCIEzcbc.caz@https?://(?:www\.)?cbc\.ca/(?!player/)(?:[^/]+/)+(?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                 P    t         j                  |      rdS t        |   |      S )NF)CBCPlayerIEsuitablesuper)clsr-   	__class__s     ]/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/cbc.pyrB   zCBCIE.suitables   s%    #,,S1uLuw7G7LL    c                 H   | j                  ||t              }|j                  d      }|sc|d   }| j                  d| d|d      }|rt	        |d t
              }|s0| j                  d|z   |      d	   d
   d   j                  d      d   }| j                  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    rF   <lambda>z,CBCIE._extract_player_init.<locals>.<lambda>   s    1Y<?63J rG   z\http://feed.theplatform.com/f/h9dtGB/punlNGjMlc1F?fields=id&byContent=byReleases%3DbyId%253DrN   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          rF   _extract_player_initzCBCIE._extract_player_initw   s    &&{J
K??9-!(+G&&abiajjlmu ' &D "4)JCP..ru||&(()++/116sB@ H:6XNNrG   c           
      h   | j                  |      }| j                  ||      }| j                  |d       xs( | j                  d|dd       xs | j	                  |      }t        j                  d|      D cg c]  }| j                  ||       }}g }dD ]'  }|j                  t        j                  ||             ) |j                  t        |      D 	cg c]  }	| j                  d|	 d|	       c}	       | j                  ||t        |      | j                  |            S c c}w c c}	w )Ndefaultztwitter:titler'   z,CBC\.APP\.Caffeine\.initInstance\(({.+?})\);)z%<iframe[^>]+src="[^"]+?mediaId=(\d+)"z<div[^>]+\bid=["\']player-(\d+)zguid["\']\s*:\s*["\'](\d+)rV   rW   )	_match_id_download_webpage_og_search_title_html_search_meta_html_extract_titlerefindallre   extendr   r]   playlist_resultr   _og_search_description)
r^   r-   r`   webpager'   r_   rN   	media_idsmedia_id_rerb   s
             rF   _real_extractzCBCIE._real_extract   sP   ^^C(
((j9&&w&= 6**?GWVZ*[6,,W5 	
  "zz*Y[bce %%k:>e e 	/ 	?K RZZW=>		?
 	&y13 OOj
3[(K3 	4 ##Zu!5''02 	2e3s   9D*D/)__name__
__module____qualname__IE_NAME
_VALID_URL_TESTSclassmethodrB   re   rv   __classcell__)rE   s   @rF   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` M MO 2rG   r   c                   8   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d@dAidBdxdydzdd{d|dYd/d}d~ddg g dg ddd2dddddddd/ddddg d>gd>dgdddd2dddddddddgZd Zd Zy)rA   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.   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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                 >    t        |dfddt        ht        f      S )Nr   c                     |d   k(  S )Nr   rP   )_vr   s     rF   rS   z*CBCPlayerIE._parse_param.<locals>.<lambda>}  s    &	T@Q rG   value)r   r[   any)r^   
asset_datar   s     `rF   _parse_paramzCBCPlayerIE._parse_param|  s"    J3QSZ]`\acf(ghhrG   c                 L   | j                  |      }| j                  d| |      }| j                  d|d|      d   d   }t        |ddd f      }|s-t        |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 ]K  }	|j                  |	j                  d      xs dg       j                  |	d   |	j                  d      d       M |D ]  }
|
d   }|
d   }|dk7  r| j                  d| d|        +| j                  ||d | d!      }t        | j                  |d"            }|d#k(  r| j                  |d$   |d%d&'      \  }}|j                  |       |s| j                  ||(       s|st        |d) t         t#        j$                  t&        d* +      hd,t(        hf      xs i }| j+                  d-|j                  d$      d.d /      }|rd0|v r|t-        t/        |d$         d%      z   }| j1                  t3        |      |d1d2d23      sL|j                  i ||d4d5d d d6       i|j                  |d$   || j                  |d7      d8k(  rd9nd d:        t        |dd;d< d=t5        d>?      hfd@t5        d>?      hfdAt        hfdBf      }t7        |      dCk(  r*|dD   j                  dE      s|dD   j                  dF      sg }i t        |dGt        hfdHt        j8                  hfdId$t:        ht=        d J      hfdKt5        d>?      hfddLt        hfdMt        hfddNt>        hfddOt4        hfdPhfddQt        hfdRdSdAt        hfddTt         fdUdSdAt        hfdV      ||||dWS )XNhttps://www.cbc.ca/player/play/window\.__INITIAL_STATE__\s*=initial statevideocurrentClipmediaassetsc                 ,    t        |d         xr |d   S )Nkeytyper   r   r   s     rF   rS   z+CBCPlayerIE._real_extract.<locals>.<lambda>  s    ;qx3H3VQvY rG   rI   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   r   s     rF   rS   z+CBCPlayerIE._real_extract.<locals>.<lambda>  s    ;WXY^W_K` rG   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                 8    |j                  d      dk7  xr |d   S )Nvcodecnonetbr)rY   r   s     rF   rS   z+CBCPlayerIE._real_extract.<locals>.<lambda>  s    xF!:!Gqx rG   c                     | d   S )Nr   rP   rQ   s    rF   rS   z+CBCPlayerIE._real_extract.<locals>.<lambda>  s
    QuX rG   )r   rU   z(https?://[^?#]+?/)hdntl=zbase urlrg   z/live/zChecking for https formatF)errnoterL   z	https-mp4https)r-   	format_idr   manifest_urlacodec	mediaTypeaudior   )r-   r&   r   r   c                 "    t        |d         d uS )N	startTime)floatr   s     rF   rS   z+CBCPlayerIE._real_extract.<locals>.<lambda>  s    eAkN.C4.O rG   r   i  )scaleendTimer   )
start_timeend_timer'   r   r   r   r   r'   r(   imagequerypublishedAtclipTypeshowNamer   r   c                     rd S | S NrP   )rR   is_lives    rF   rS   z+CBCPlayerIE._real_extract.<locals>.<lambda>  s    V]d cd rG   regionr   .genrer   )r'   r(   r   r)   r   r   r   r   r   r   r   r   )r%   formatsr   r   r   ) ri   rj   _search_jsonr   r[   r   
setdefaultrY   appendreport_warningrZ   r   r   #_extract_m3u8_formats_and_subtitlesrp   _merge_subtitlesall	functoolspartialsorteddict_search_regexr   r   _request_webpager   r	   lenstripr   r   r
   )r^   r-   video_idrs   datar   rb   r   r   subasset	asset_key
asset_typer   r&   fmtssubsbest_video_fmtbase_urlmp4_urlr   r   s                        @rF   rv   z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b 	C  !4!=rBII5z(K 	  *	EeIvJZ'##&G
|SVW`Va$bc,,YLQ[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$+(,"&$  %e,(,(9(9*k(RV](]fcg  M*	X  Z!O*]-F,GH&T)B(CD 3%R'  x=Ax{|'DQRXbHc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%@" 
 " '
 	
rG   N)	rw   rx   ry   rz   r{   _GEO_COUNTRIESr|   r   rv   rP   rG   rF   rA   rA      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
rG   rA   c                   :    e Zd ZdZdZddddiddddd	idgZd
 Zy)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 broadcast)r-   r?   r/   z+https://www.cbc.ca/player/news/Canada/Northznews/canada/northc                     t         j                  j                   j                  |            j	                          j                  |      } j                  d|d       fd} j                   |             S )Nr   r   c            	   3   x   K   t        ddfddddf      D ]  } j                  d|  t                y w)Nr   clipsByCategoryc                 *    | j                         k(  S r   )lower)kr   playlist_ids     rF   rS   zDCBCPlayerPlaylistIE._real_extract.<locals>.entries.<locals>.<lambda>  s    k9Q rG   items.r%   r   )r   r]   rA   )r  json_contentr!  r^   s    rF   rN   z2CBCPlayerPlaylistIE._real_extract.<locals>.entries  sR     (*,QSZ\_ae8  a oo(Gz&RT_``as   7:)urllibparseunquoteri   r  rj   r   rq   )r^   r-   rs   rN   r#  r!  s   `   @@rF   rv   z!CBCPlayerPlaylistIE._real_extract  sr    ll**4>>#+>?EEG((k:((,gU	a ##GI{;;rG   N)rw   rx   ry   rz   r{   r|   rv   rP   rG   rF   r  r    sF    &GQJ\?
 =%
F<rG   r  c                   $    e Zd ZdZdgZddZd Zy)CBCGemBaseIEcbcgemr   Nc                 <    | j                  d| |xs |ddi      S )Nz9https://services.radio-canada.ca/ott/catalog/v2/gem/show/devicewebr   rZ   )r^   item_idr`   s      rF   _call_show_apizCBCGemBaseIE._call_show_api  s3    ""GyQ!'(E): # < 	<rG   c                    d }t        |dt        hf      }|rCt        j                  d|      x}r+t	        |j                  d            }|j                  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   r2  r   release_timestampr)   	age_limit)r1  r'   )r   r[   rn   matchr
   groupr   r   r   r   r   )r^   	item_infor2  r'   mobjs        rF   _extract_item_infoz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\]
' 

 
 	
rG   r   )rw   rx   ry   _NETRC_MACHINEr  r/  rC  rP   rG   rF   r(  r(  
  s    NVN<

rG   r(  c                   v   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d@d;Zd< Zd= Zd> Zd? Zy8)A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>   r1  r2  r   r<  r*   20210618r)   i `release_date20200107r=  i ^r>     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                 <    | j                  dd dddi      d   d   S )Nz<https://services.radio-canada.ca/ott/catalog/v1/gem/settingszDownloading site settingsr+  r,  r   identityManagementropcr-  r^   s    rF   _ropc_settingszCBCGemIE._ropc_settingsi  s=    ""JD'%/@ # BBVXX^` 	`rG   c                 N    t        |      d   t        j                         z
  dk  S )Nexpi,  )r   time)r^   tokens     rF   _is_jwt_expiredzCBCGemIE._is_jwt_expiredo  s"    &u-		;cAArG   c                 :   | j                  | j                  d   d |t        d| j                  i|d| j                  d   i            }|d   | _        |d   | _        | j                  j                  | j                  d| j                  | j
                  g       y )	Nr-   	client_idscopescopes)r  refresh_tokenaccess_token
token_data)	rZ   rU  r   
_CLIENT_ID_refresh_token_access_tokencachestorerD  )r^   
oauth_datanoteresponses       rF   _call_oauth_apizCBCGemIE._call_oauth_apir  s    &&&d9KT__MM ,,X6M : '  '7%n5

,,lT=P=PRVRdRd<efrG   c                     | j                   s7| j                  j                  | j                  dd d g      \  | _         | _        | j                   rU| j                  rI| j                  d       | j                  s+| j                  j                  | j                  d      | _        y 	 | j                  d||dd       y # t        $ rF}t        |j                  t              r&|j                  j                  d	k(  rt        d
d       d }~ww xY w)Nra  rg   zUsing cached refresh tokenclaims_tokenpassword)
grant_typeusernamerm  z
Logging in)rh  i  z Invalid username and/or passwordTexpected)rc  re  loadrD  rd  write_debug_claims_tokenrj  r   
isinstancecauser   status)r^   ro  rm  es       rF   _perform_loginzCBCGemIE._perform_login}  s    ""6:jjoo##\D$< 7F 7I3D!3 4#5#59:%%%)ZZ__T5H5H.%Y"		  ($$" !	 ! "
  	!''9-!''..C2G$%GRVWW	s   &B> >	DADDc                    | j                  | j                        r+	 | j                  d| j                  d       | j                  S | j                  S # t        $ rt d\  | _        | _        | j
                  j                  | j                  dd d g       | j                  d        | j                  | j                           Y | j                  S w xY w)Nr_  )rn  r_  )NNra  z=Refresh token has been invalidated; retrying with credentials)rZ  rd  rj  rc  r   re  rf  rD  r   ry  _get_login_inforT  s    rF   _fetch_access_tokenzCBCGemIE._fetch_access_token  s     2 23	=$$"1%)%8%8&  !!!t!!! " =:D7#T%7

  !4!4lT4LQ##$cd###T%9%9%;<!!!=s   A A/CCc           
         | j                         d   sy | j                  r| j                  | j                        rp| j                  dd dddidd| j	                          i      d	   | _        | j
                  j                  | j                  d
| j                         | j                  S | j                  d       | j                  S )Nr   zKhttps://services.radio-canada.ca/ott/subscription/v2/gem/Subscriber/profilezDownloading claims tokenr+  r,  AuthorizationzBearer )r   headersclaimsTokenrl  zUsing cached claims token)	r{  rt  rZ  rZ   r|  re  rf  rD  rs  rT  s    rF   _fetch_claims_tokenzCBCGemIE._fetch_claims_token  s    ##%a(!!T%9%9$:L:L%M!%!4!4]058I(GD4L4L4N3O*PQ "5 "S Ta"bD JJT00.$BTBTU !!! 89!!!rG   c                 "  
 | j                  |      j                  dd      \  
}| j                  
      }t        |ddddd
fdt        t        d      hf      }i }| j                         x}r||d	<   | j                  d

|dddddddd|d   d	      }|j                  d      dk(  r| j                  dg       nv|j                  d      dk(  r| j                  d       nO|j                  d      dk7  r;t        | j                   d|j                  d       d|j                  d              | j                  |d!   
d"dd#d$i%      }| j                  |       |D ]^  }	|	j                  d&      d'k(  s|	j                  d(      d)|	d(<   |	j                  d*      d+|	d*<   d,|	d-   j                         v sZd.|	d/<   ` d0t!        |      it        |d1t"        hfd2d3d4t         hfd2d5dt"        hfd6      | j%                  |      

|d7S )8Nr%   r   content.lineupsr"  c                     |d   k(  S Nr-   rP   r   r   r  s     rF   rS   z(CBCGemIE._real_extract.<locals>.<lambda>  s    5X- rG   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#   rm  )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%   r<  r   )_match_valid_urlr@  r/  r   r   r   r  rZ   rY   raise_geo_restrictedraise_login_requiredr   rz   _extract_m3u8_formats_remove_duplicate_formatsr  r
   r[   rC  )r^   r-   r   
video_inforA  r  rl  	m3u8_infor   fmtr  s             @rF   rv   zCBCGemIE._real_extract  s~   "&"7"7"<"B"B4"R-((2
 sIsG-sW[5I4J.L M	 3355<5(4G$%''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
 "
 	
rG   )zRefreshing access token)rw   rx   ry   rz   r{   r|   rb  rc  rd  rt  r  cached_propertyrU  rZ  rj  ry  r|  r  rv   rP   rG   rF   rF  rF  ,  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,"";
rG   rF  c                   B    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y)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/s06rH  rG  r>   )r%   r'   r   r   r   )r-   playlist_countr/   z$https://gem.cbc.ca/schitts-creek/s06Tr   c              #      K   t        |dd f      D ]1  } | j                  d|d    t        fi | j                  |       3 y w)Nr"  c                     |d   S r  rP   r   s     rF   rS   z+CBCGemPlaylistIE._entries.<locals>.<lambda>  s
    % rG   zhttps://gem.cbc.ca/media/r-   )r   r]   rF  rC  )r^   season_infor1  s      rF   _entrieszCBCGemPlaylistIE._entries  sY     #K';P1QR 	4G!$//+GEN+;<h4))'24 4	4s   AAc                 r   | j                  |      j                  ddd      \  }}| j                  ||      }t        |dddfdt        t        d	      hf      } | j                  | 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`   r  .r  c                 &    |d   t              k(  S )Nr  )int)r   r   r   s     rF   rS   z0CBCGemPlaylistIE._real_extract.<locals>.<lambda>  s    >*c&k9 rG   zseason infor'   r  )r'   r   r   r   )
r  r@  r/  r   r   r   rq   r  r[   r
   )r^   r-   	season_idr  	show_infor  r   s         @rF   rv   zCBCGemPlaylistIE._real_extract  s    "&"7"7"<"B"B4QY"Z	4'''C	"9sI93AW@X/Z [ $t##MM+&	B;!C5)"SE*"0;-!@) B $I#/?@B 	BrG   N)rw   rx   ry   rz   r{   r|   r  rv   rP   rG   rF   r  r    sL    #GqJ <%' 
	 6F 4BrG   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y/)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&   r=  rJ  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   r=  rJ  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   r=  rJ  z#Replay might no longer be available)r-   r.   r/   r   r0   z#https://gem.cbc.ca/live-event/43273r   r   c                   	 | j                  |      	| j                  |	      }| j                  |	      d   d   d   }|j                  d      s0t	        |d      	k(  r|d   }nt	        |dd	fd	t
        f      xs i }|j                  d      }|st        d
d      |j                  d      rdnd}t	        |dt        hf      }|dk(  r1|r/|t        j                         kD  rg }d}| j                  dd       n8| j                  d	ddd|ddddd      }| j                  |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                 8    |d   j                  d      d   k(  S )Nr   -r   )	partitionr  s     rF   rS   z,CBCGemLiveIE._real_extract.<locals>.<lambda>l  s     5!3!3C!8!;x!G rG   zBCouldn't find video metadata, maybe this livestream is now offlineTrp  isVodEnabledr  r   r7  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  r=  r'   r(   )r3  r4  r-   )r'   r(   r   )ri   rj   _search_nextjs_datarY   r   r   r   r   rX  raise_no_formatsrZ   r  r[   )
r^   r-   rs   r  video_stream_idr  r=  r   stream_datar  s
            @rF   rv   zCBCGemLiveIE._real_extract`  s   >>#&((h7--gx@I+VW]^
 ~~01J(89XE'0
)*0'G7N O URT  %..);< U`df f %/NN>$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( 

 
	
rG   N)rw   rx   ry   rz   r{   r|   r  rv   rP   rG   rF   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
rG   r  ))r  rn   rX  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   rA   r  r(  rF  r  r  rP   rG   rF   <module>r     s     	   ! $ -    ( > ={2M {2|I
- I
X
<- <@
= 
D@
| @
F&B| &BR{
= {
rG   