U
    g8                     @   s   d dl Z d dlZ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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 G dd deZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZ dS )    N   )InfoExtractor   )HEADRequest)ExtractorErrorfloat_or_noneint_or_none
js_to_jsonmimetype2ext
orderedSetparse_iso8601replace_extensionsmuggle_urlstrip_or_nonetraverse_objtry_get
update_urlurl_basenameurl_or_nonec                       s   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d7d8Zd9d: Zd;d< Z	  Z
S )=CBCIEzcbc.caz@https?://(?:www\.)?cbc\.ca/(?!player/)(?:[^/]+/)+(?P<id>[^/?#]+)zGhttp://www.cbc.ca/22minutes/videos/clips-season-23/don-cherry-play-offsZ 97e24d09672fc4cf56256d6faa6c25bcZ
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XVZ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-4Z 162adfa070274b144f4fdc3c3b8207dbZ
2414435309z*22 Minutes Update: What Not To Wear QuebeczKThis week's latest Canadian top political story is What Not To Wear Quebec.Z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-liveZ 0274a90b51a9b4971fe005c63f592f12Z
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.Z19780210iAz404 Not Foundznhttp://www.cbc.ca/natureofthings/blog/birds-eye-view-from-vancouvers-burrard-street-bridge-how-we-got-the-shotZ 377572d0b49c4ce0c9ad77470e0b96b4Z
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.Z20160201iV)r   r   r   r   r   r   r   )r"   r#   Z 415a0e3f586113894174dfb31aa5bb1aZ
2658915080zFly like an eagle!zFEagle equipped with a mini camera flies from the world's tallest towerZ20150315iU)r!   playlistr$   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                    s   t |rdS t |S )NF)CBCPlayerIEsuitablesuper)clsr!   	__class__ 8/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/cbc.pyr)   p   s    zCBCIE.suitablec                 C   s   |  ||t}|d}|sz|d }| jd| d|dd}|rPt|dd t}|sz| d	| |d
 d d dd }| d| d|S )NmediaIdZclipIdzLhttp://tpfeed.cbc.ca/f/ExhSPC/vms_5akSXx4Ng_Zn?byCustomValue={:mpsReleases}{}F)fatalc                 S   s   | d d d S )Nentriesr   Zguidr.   xr.   r.   r/   <lambda>}       z,CBCIE._extract_player_init.<locals>.<lambda>z\http://feed.theplatform.com/f/h9dtGB/punlNGjMlc1F?fields=id&byContent=byReleases%3DbyId%253Dr3   r   r   /
cbcplayer:	CBCPlayer)Z_parse_jsonr	   get_download_jsonr   strsplit
url_result)selfplayer_init
display_idZplayer_infomedia_idZclip_idfeedr.   r.   r/   _extract_player_initt   s6    

 zCBCIE._extract_player_initc                    s    | | }j|d dp>jd|dd dp>|} fddtd|D }g }dD ]}|t|| qd|fddt|D  	| t
||S )	Ndefaultztwitter:titler   c                    s   g | ]} | qS r.   )rF   ).0rB   rC   rA   r.   r/   
<listcomp>   s   z'CBCIE._real_extract.<locals>.<listcomp>z,CBC\.APP\.Caffeine\.initInstance\(({.+?})\);)z%<iframe[^>]+src="[^"]+?mediaId=(\d+)"z<div[^>]+\bid=["\']player-(\d+)zguid["\']\s*:\s*["\'](\d+)c                    s    g | ]}  d | d|qS )r:   r;   )r@   )rI   rD   rA   r.   r/   rK      s   )	_match_id_download_webpageZ_og_search_titleZ_html_search_metaZ_html_extract_titlerefindallextendr   playlist_resultr   Z_og_search_description)rA   r!   webpager   r3   Z	media_idsZmedia_id_rer.   rJ   r/   _real_extract   s,    

  zCBCIE._real_extract)__name__
__module____qualname__IE_NAME
_VALID_URL_TESTSclassmethodr)   rF   rT   __classcell__r.   r.   r,   r/   r      s   			Pr   c                   @   sJ  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dddddddg ddgddddddd gd!d"d#d$dd%d&d'd(d)g d*d+d,gd,d-d.d,gdd/gd0d1d2id3d4dd5ddd6dddg ddgddddddd gd!d"d7d8dd%d&d'd(d)g d*d+d,gd,d-d.d,gdd/gd0d1d2id3d9d:d;dd<d=d>d?d@dAdBdCgidDdEdFd/dGdHgdIdGgdJdKd/gdLd"dMdNdOddPdQdRdSdTdUdVdWgidXg dYdGdZdJdd[d/gd\d"d]d^dd_d`dadbdcdddedfg g dggdhdidjgdJdkd1d2id3dldmdnddodpdGddqdrdsdtg g dudvd/dGdwdxgdyd"dzd{d|dd}d~ddddddg d/gd/dgdddd"dddddddddgZdd Zdd ZdS )r(   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/2683190193Z 64d25f841ddf4ddb28a235338af32e2cZ
2683190193r   zGerry Runs a Sweat Shopz$md5:b457e1c01e8ff408d9d801c1c2cd29b0iVZ20160210r   r   z0Geo-restricted to Canada and no longer availabler    z:http://www.cbc.ca/i/caffeine/syndicate/?mediaId=2657631896Z e5e708c34ae6fca156aafe17c43e8b75Z
2657631896Zmp3z>CBC Montreal is organizing its first ever community hackathon!z$md5:dd3b692f0a139b0369943150bd1c46a9iЅTZ20150307zChttps://i.cbc.ca/ais/1.2985700,1717262248558/full/max/0/default.jpgg"~@zAll in a Weekend Montrealzcount:11ZQuebeczSeason 2015i  ZExcerptZOther)r   r   r   r   r   r   	thumbnailchaptersduration
categoriestagslocationseriesseasonseason_number
media_typegenres)r!   r"   r#   z:http://www.cbc.ca/i/caffeine/syndicate/?mediaId=2164402062Z
2164402062zCancer survivor four times overzNTim Mayer has beaten three different forms of cancer four times in five years.iz޳NZ20111104zChttps://i.cbc.ca/ais/1.1711287,1717139372111/full/max/0/default.jpgg9v[g@zCBC News: Windsor at 6:00ZWindsorZCancerzNews/Canada/WindsorZNews)r   r   r   r   r   r   r^   r_   r`   rd   ra   rc   rb   rg   rh   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.6424403Z 8025909eaffcf0adf59922904def9a5ez	9.6424403z(The National | N.W.T. wildfire emergencyz$md5:ada33d36d1df69347ed575905bfd496ciofg#~	@z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:5Z20240617zThe NationalzThe National Latest BroadcastszThe National - Full ShowZCanadazFull Program)r   r   r   r   r   r`   	subtitlesr^   r_   r   ra   rd   rb   rc   rg   rh   z.https://www.cbc.ca/player/play/video/1.7194274Z 188b96cf6bdcb2540e178a6caa957128z	1.7194274z;#TheMoment a rare white spirit moose was spotted in Albertaz$md5:18ae269a2d0265c5b0bbe4b2e1ac61a3i5fgZdkS@ZengZvttZm3u8_native)r   protocolzChttps://i.cbc.ca/ais/1.7194274,1717224990425/full/max/0/default.jpgzcount:3zcount:17Z20240504)r   r   r   r   r   r`   rn   r^   r_   ra   rd   rb   rc   rg   r   rh   z.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   >AZ20240724g     @z2024 Paris Olympic GameszOlympics Summer SoccerzSummer Olympics ReplayszSummer Olympics Soccer Replays)r   r   r   r   rd   rg   r^   r   r   r`   r_   rh   rb   ra   rc   z.https://www.cbc.ca/player/play/video/9.6459530Z 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ŨAZ20240726gzG@zcount:23zNews (FAST)zTV News ShowszThe National )r   r   r   r   rd   rg   r^   r   r   r`   r_   rh   rb   ra   z.https://www.cbc.ca/player/play/video/9.6420651Z 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}AZ20240612gL7A`q@ZEdmontonzcount:7)r   r   r   r   rd   rg   r^   r   r   r`   r_   rh   ra   rb   rc   zcbcplayer:1.7159484Tr!   Zonly_matchingzcbcplayer:2164402062z(http://www.cbc.ca/player/play/2657631896c                    s   t |d fdddthtfS )Nrl   c                    s   |d  kS )Nrm   r.   _vrm   r.   r/   r6   z  r7   z*CBCPlayerIE._parse_param.<locals>.<lambda>value)r   r>   any)rA   
asset_datarm   r.   rt   r/   _parse_paramy  s    zCBCPlayerIE._parse_paramc                    s  |  |}| d| |}| d|d|d d }t|dddd	 f}|st|d
thf }rddtd| dddi|ddS t|ddthfdk g i  }}t|dddd	 fD ]0}	||	dpdg |	d |	dd q|D ]|}
|
d }|
d }|dkr$| 	d| d |  q| 
||d!| d"}t| |d#}|d$kr>| j|d% |d&d' d(\}}|| |s| j||d)  s|sqt|d*d	 ttjtd+d	 d,hd-thfpi }| jd.|d%d/d d0}|rd1|krq|tt|d% d& }| jt||d2d3d3d4rj|||d5d6d d d7 q||d% || |d8d9kr`d:nd d; qt|dd<d=d	 d>tjtd?d@hfdAtjtd?d@hfdBthfdCf}t|dDkr|dE dFs|dE dGsg }t|dHthfdItjhfdJd%thtjtd dKhfdLtjtd?d@hfddMthfdNthfddOthfddPth fdQd	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/window\.__INITIAL_STATE__\s*=initial statevideoZcurrentClipZmediaassetsc                 S   s   t |d o|d S )Nkeytyper   rq   r.   r.   r/   r6     r7   z+CBCPlayerIE._real_extract.<locals>.<lambda>r0   url_transparentZThePlatformz;http://link.theplatform.com/s/ExhSPC/media/guid/2655402169/z?mbr=true&formats=MPEG4,FLV,MP3Zforce_smil_urlT)resproto)_typeie_keyr!   r   Z_format_sort_fieldsZ
streamTypeZLiveZ
textTracksc                 S   s   t |d S )Nsrcr   rq   r.   r.   r/   r6     r7   languageZundr   label)r!   rm   r~   r   Zmedianetz!Skipping unsupported asset type "z": zDownloading z JSONcontentTyperj   r!   r   hls)m3u8_idlive)targetc                 S   s   | ddko|d S )Nvcodecnonetbrr<   rq   r.   r.   r/   r6     r7   c                 S   s   | d S )Nr   r.   r4   r.   r.   r/   r6     r7   )r~   r9   z(https?://[^?#]+?/)hdntl=zbase urlrG   z/live/zChecking for https formatF)Zerrnoter2   z	https-mp4https)r!   	format_idro   Zmanifest_urlacodecZ	mediaTypeaudior   )r!   r   r   r_   c                 S   s   t |d d k	S )N	startTime)floatrq   r.   r.   r/   r6     r7   r     ZscaleZendTimerm   )
start_timeend_timer   r   r   r   r   r   r   imagequeryZpublishedAtZclipTypeZshowNamere   r`   c                    s    rd S | S Nr.   r4   is_liver.   r/   r6     r7   Zregionrb   .Zgenrera   )r   r   r^   r   rg   rd   rf   r`   rc   rb   rh   ra   )r   formatsrn   r_   r   ) rM   rN   _search_jsonr   r>   r   
setdefaultr<   appendZreport_warningr=   r
   rx   Z#_extract_m3u8_formats_and_subtitlesrQ   Z_merge_subtitlesall	functoolspartialsorteddictZ_search_regexr   r   Z_request_webpager   r   lenstripr   r   r   )rA   r!   video_idrS   datar}   rD   r   rn   subZassetZ	asset_keyZ
asset_typerw   r   ZfmtssubsZbest_video_fmtbase_urlZmp4_urlr_   r.   r   r/   rT   |  s    
    
 




    


         	
  .



zCBCPlayerIE._real_extractN)	rU   rV   rW   rX   rY   _GEO_COUNTRIESrZ   rx   rT   r.   r.   r.   r/   r(      s  	  [r(   c                   @   s<   e Zd ZdZdZddddiddddd	idgZd
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 broadcast)r!   r'   r#   z+https://www.cbc.ca/player/news/Canada/Northznews/canada/northc                    sP   t j| |}d|d  fdd}| S )Nrz   r{   c                  3   s<   t  ddfdddddfD ]} d|  tV  qd S )	Nr|   ZclipsByCategoryc                    s   |    kS r   )lower)krr   )playlist_idr.   r/   r6      r7   zDCBCPlayerPlaylistIE._real_extract.<locals>.entries.<locals>.<lambda>items.r   ry   )r   r@   r(   r   Zjson_contentr   rA   r.   r/   r3     s      
   
z2CBCPlayerPlaylistIE._real_extract.<locals>.entries)urllibparseunquoterM   r   rN   r   rR   )rA   r!   rS   r3   r.   r   r/   rT     s       z!CBCPlayerPlaylistIE._real_extractN)rU   rV   rW   rX   rY   rZ   rT   r.   r.   r.   r/   r     s      r   c                   @   s   e Zd ZdZdZddddddd	d
g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!d"ddidd#d$d%gZd&gZd'Zd(Zd)Z	d*d+ Z
d,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd)S )8CBCGemIEz
gem.cbc.cazFhttps?://gem\.cbc\.ca/(?:media/)?(?P<id>[0-9a-z-]+/s[0-9]+[a-z][0-9]+)z-https://gem.cbc.ca/media/schitts-creek/s06e01zschitts-creek/s06e01r   zSmoke Signalsz$md5:929868d20021c924020641769eb3e7f1z\re:https://images\.radio-canada\.ca/[^#?]+/cbc_schitts_creek_season_06e01_thumbnail_v01\.jpgi,  ZcomedySchitt's CreekSeason 6r&   r   Z20210618i@`Z20200107i@^)r   r   r   r   r^   r`   ra   rd   re   rf   episodeepisode_number
episode_idr   r   release_daterelease_timestampformatZbvrk   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  Z20210617i`Z20151124iSV)r   r   r   r   r^   rd   rf   re   r   r   r   r`   ra   r   r   r   r   z3https://gem.cbc.ca/nadiyas-family-favourites/s01e01Trp   r]   z$3f4beddd-2061-49b0-ae80-6f1f2ed65b37ZcbcgemNc           
      C   s   t ||d }ddi}d| ji}| jdd |||d}|d }|| jdd	}| jd
d ||d}|d }t d|i }ddd}| jdd ||dd}|d }	dd|	d}| jdd |dd}|d S )N)emailpasswordcontent-typezapplication/jsonapikeyz2https://api.loginradius.com/identity/v2/auth/login)r   headersr   access_tokenZjwt)r   r   Zjwtappz3https://cloud-api.loginradius.com/sso/jwt/api/token)r   r   	signatureZweb)r   ott-device-typez5https://services.radio-canada.ca/ott/cbc-api/v2/token  )r   r   expected_statusZaccessToken)r   r   zott-access-tokenz7https://services.radio-canada.ca/ott/cbc-api/v2/profile)r   r   ZclaimsToken)jsondumpsencode_TOKEN_API_KEYr=   )
rA   r   r   r   r   r   respr   sigZcbc_access_tokenr.   r.   r/   _new_claims_tokenB  sN    
     
     zCBCGemIE._new_claims_tokenc                 C   s,   | j dd }t|d }t|d S )N.r   z==exp)_claims_tokenr?   base64urlsafe_b64decoder   loads)rA   Zb64_datar   r.   r.   r/   _get_claims_token_expirya  s    z!CBCGemIE._get_claims_token_expiryc                 C   s   |   }|t  dk S )N
   )r   time)rA   r   r.   r.   r/   claims_token_expiredi  s    zCBCGemIE.claims_token_expiredc                 C   s   | j d k	o|   S r   )r   r   rL   r.   r.   r/   claims_token_validn  s    zCBCGemIE.claims_token_validc                 C   s0   |   s*| ||| _| j| jd| j | jS Nclaims_token)r   r   r   cachestore_NETRC_MACHINE)rA   r   r   r.   r.   r/   _get_claims_tokenq  s    zCBCGemIE._get_claims_tokenc                 C   s"   |   rd S | j| jd| _d S r   )r   r   loadr   r   rL   r.   r.   r/   _real_initializew  s    zCBCGemIE._real_initializec                 C   s  |  |}| jd| |dd}|  \}}|rJ|rJ| ||}d|i}ni }| j|d d ||d}|dd	kr| jd
gd nP|ddkr| jdd n4|ddkrt| j d|d d|d | j	|d |ddddid}	| 
|	 |	D ]Z}
|
ddkr|
dd kr(d|
d< |
dd kr@d|
d< d|
d  krd |
d!< q|||	d"t|d#thfd#thfd$thfd%thfd&thfd'thfd(thfd)thfd*thtfd+td,d-hfd.td,d-hfd/S )0Nz7https://services.radio-canada.ca/ott/cbc-api/v2/assets/r   r   zx-claims-tokenZplaySessionr!   )r   Z	errorCoder   r]   )Z	countries#   r   )methodr   z said: z - messager   r   manifestType )r   r   r   r   r   Zm4ar   z	mp4a.40.2Zdescriptiver   Z
preference)r   r   r   r   r   r   rd   re   r   r`   categoryairDater   r   ZavailableDate)r   r   r   r^   rd   rf   r   r`   ra   r   r   )rM   r=   Z_get_login_infor   r<   Zraise_geo_restrictedZraise_login_requiredr   rX   _extract_m3u8_formatsZ_remove_duplicate_formatsr   r   r>   r   r   r   )rA   r!   r   
video_infor   r   r   r   Z	m3u8_infor   fmtr.   r.   r/   rT   |  sh    
 
&    


zCBCGemIE._real_extract)rU   rV   rW   rX   rY   rZ   r   r   r   r   r   r   r   r   r   r   rT   r.   r.   r.   r/   r     sv   3r   c                
   @   sF   e Zd ZdZdZddddddd	dd
dddddgZdZd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/s06r   z$md5:6a92104a56cbeb5818cc47884d4326a2r   r&   zhttps://images.radio-canada.ca/v1/synps-cbc/season/perso/cbc_schitts_creek_season_06_carousel_v03.jpg?impolicy=ott&im=Resize=(_Size_)&quality=75)r   r   r   rd   rf   re   r^   )r!   Zplaylist_countr#   z$https://gem.cbc.ca/schitts-creek/s06Trp   z6https://services.radio-canada.ca/ott/cbc-api/v2/shows/c                    sd  |  |}|d}|d}| j| j| |dd}t|d t fdd|d D d }|d krztd	  d
| g }|d D ]}|ddd|d  |d |d|d|d|d|d|d |d|d|d|d |d|dgd qd }	|d}
|
d k	r2|
	ds2|
}	d|||d |d|	|d|d|d d	S )Nr   showr   r   re   c                 3   s    | ]}| d  kr|V  qdS )re   Nr   )rI   sre   r.   r/   	<genexpr>  s      z1CBCGemPlaylistIE._real_extract.<locals>.<genexpr>ZseasonszCouldn't find season z of r}   r   ZCBCGemzhttps://gem.cbc.ca/media/r   r   r   rd   r   r`   r   )r   r   r!   r   r   r   r^   rd   rf   re   	season_idr   r   r   r`   ra   zdata:r%   )	r   r3   r   r   r   r^   rd   rf   re   )
Z_match_valid_urlgroupr=   	_API_BASEintnextr   r   r<   
startswith)rA   r!   matchr   r   Z	show_infoZseason_infoZepisodesr   r^   Ztn_urir.   r   r/   rT     sT    






zCBCGemPlaylistIE._real_extractN)rU   rV   rW   rX   rY   rZ   r   rT   r.   r.   r.   r/   r     s&   r   c                   @   s   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.d/ Zd0S )1CBCGemLiveIEzgem.cbc.ca:livez1https?://gem\.cbc\.ca/live(?:-event)?/(?P<id>\d+)z$https://gem.cbc.ca/live/920604739687Z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   ZAyqZwxRqh8EHr   iXZ20170413r   )	r   r   r^   live_statusr   r   r   r   r   zLive might have ended)r!   r#   r$   zhttps://gem.cbc.ca/live/44Z44Tzre:^Ottawa [0-9\-: ]+z/re:https://images.gem.cbc.ca/v1/cbc-gem/live/.*)r   r   r   r   r   r  r^   ri   )r!   r#   rl   r$   z#https://gem.cbc.ca/live-event/10835Z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dZ20230325)	r   r   r   r   r   r  r^   r   r   z#https://gem.cbc.ca/live-event/42314Z 297a9600f554f2258aed01514226a697Z42314was_livez&Women's Soccer - Canada vs New Zealandz$md5:36200e5f1a70982277b5a6ecea86155dzre:https://.+default\.jpgi_fZ20240725)r   r   r  r   r   r^   r   r   z#Replay might no longer be available)r!   r"   r#   rl   r$   z#https://gem.cbc.ca/live-event/43273rp   r]   c           	         sB  |  | | | }| | d d d }|dsnt|d krP|d }nt|dd fd	d
tfpli }|d}|stddd|drdnd}t|dthf}|dkr|r|t krg }d}| j	ddd n<| j
d ddd|dddddd}| j|d  d|dkd } |||d!t|d"thfd#thfd$d%S )&NpropsZ	pagePropsr   ZformattedIdMedia)eventr~   r  )ZfreeTv)Zstreams.r   c                    s   |d  dd  kS )Nr~   -r   )	partitionrq   r   r.   r/   r6   U  r7   z,CBCGemLiveIE._real_extract.<locals>.<lambda>zBCouldn't find video metadata, maybe this livestream is now offlineT)expectedZisVodEnabledr  r   r   Zis_upcomingz#This livestream has not yet startedz5https://services.radio-canada.ca/media/validation/v2/ZmedianetliveZhdZipadtruer   r   Zdesktop)ZappCodeZconnectionTypeZ
deviceTypeZidMediaZmultibitrateoutputZtechr   r   r!   r   )r   )r   r   r  r   r   r   )ZimagesZcardr!   )r   r   r^   )rM   rN   Z_search_nextjs_datar<   r   rv   r   r   r   Zraise_no_formatsr=   r   r>   )	rA   r!   rS   r   Zvideo_stream_idr  r   r   Zstream_datar.   r   r/   rT   I  sp    


 
 
     zCBCGemLiveIE._real_extractN)rU   rV   rW   rX   rY   rZ   r   rT   r.   r.   r.   r/   r    sz   	
Cr  )!r   r   r   rO   r   urllib.parser   commonr   Z
networkingr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r(   r   r   r   r  r.   r.   r.   r/   <module>   s"   D~  N  /L