
    yfv                         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  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   )
compat_str)
ExtractorErrorint_or_nonejoin_nonempty
js_to_json
orderedSetparse_iso8601smuggle_urlstrip_or_nonetraverse_objtry_getc                        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uploader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"   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                 X    t         j                  |      rdS t        t        |   |      S )NF)CBCPlayerIEsuitablesuperr   )clsr"   	__class__s     6/usr/lib/python3/dist-packages/yt_dlp/extractor/cbc.pyr7   zCBCIE.suitablem   s(    #,,S1uVuUC7QRU7VV    c                 F   | j                  ||t              }|j                  d      }|sb|d   }| j                  d|z  |d      }|rt	        |d t
              }|s0| j                  d|z   |      d   d	   d
   j                  d      d   }| j                  d|z  d|      S )NmediaIdclipIdzOhttp://tpfeed.cbc.ca/f/ExhSPC/vms_5akSXx4Ng_Zn?byCustomValue={:mpsReleases}{%s}F)fatalc                     | d   d   d   S )Nentriesr   guid )xs    r;   <lambda>z,CBCIE._extract_player_init.<locals>.<lambda>z   s    1Y<?63J r<   z\http://feed.theplatform.com/f/h9dtGB/punlNGjMlc1F?fields=id&byContent=byReleases%3DbyId%253DrB   r   r   /cbcplayer:%s	CBCPlayer)_parse_jsonr
   get_download_jsonr   r   split
url_result)selfplayer_init
display_idplayer_infomedia_idclip_idfeeds          r;   _extract_player_initzCBCIE._extract_player_initq   s    &&{J
K??9-!(+G&&adkku ' &D "4)JJW..ru||&(()++/116sB@ ~8+xPPr<   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|	z  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+)rI   rJ   )	_match_id_download_webpage_og_search_title_html_search_meta_html_extract_titlerefindallrW   extendr   rO   playlist_resultr   _og_search_description)
rP   r"   rR   webpager   rQ   rB   	media_idsmedia_id_rerT   s
             r;   _real_extractzCBCIE._real_extract   sN   ^^C(
((j9&&w&= 6**?GWVZ*[6,,W5 	
  "zz*Y[bce %%k:>e e 	/ 	?K RZZW=>		?
 	&y13 OONX5{HM3 	4 ##Zu!5''02 	2e3s   9D*D/)__name__
__module____qualname__IE_NAME
_VALID_URL_TESTSclassmethodr7   rW   rg   __classcell__)r:   s   @r;   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` W WQ 2r<   r   c                      e Zd ZdZd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dd g d!d"d#d$gd%d&d'd(d)d*d+d,d-d.d/d0d1d2d3i dd4dddd5dd6dd7dd8dddd9d g d!d:d)d;d#d<gd'd=d%d>gd?d@gd/d0d1dAdi ddddddddB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/d0d1dCd3i dd4dddd5dd6dd7dd8dddd9d g d!d:d)d;d#d<gd'd=d%d>gd?d@gd/d0d1dDdEi ddFddddGddHddId!dJdKdLdMdNdOgiddPddd dQddRd#dSd)dTd%dUd?dVgd'dWd/dXd1dYdZd[d\dZd[d]dZd[g	Zd^ Zy_)`r6   zcbc.ca:playerzn(?:cbcplayer:|https?://(?:www\.)?cbc\.ca/(?:player/play/|i/caffeine/syndicate/\?mediaId=))(?P<id>(?:\d\.)?\d+)z(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   20150307r   	thumbnailzGhttp://thumbnails.cbc.ca/maven_legacy/thumbnails/sonali-karnick-220.jpgchaptersdurationg"~@
categoriesz%AudioMobile/All in a Weekend Montrealtagszcount:8locationQuebecserieszAll in a Weekend MontrealseasonzSeason 2015season_numberi  
media_typeExcerpt)r"   r#   r$   z:http://www.cbc.ca/i/caffeine/syndicate/?mediaId=2164402062 33fcd8f6719b9dd60a5e73adcb83b9f6
2164402062zCancer survivor four times overzNTim Mayer has beaten three different forms of cancer four times in five years.iz޳N20111104zVhttps://thumbnails.cbc.ca/maven_legacy/thumbnails/277/67/cancer_852x480_2164412612.jpgg9v[g@zCBC News: Windsor at 6:00zNews/Canada/WindsorWindsorcancercreatorszAllison Johnsonz(https://www.cbc.ca/player/play/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(https://www.cbc.ca/player/play/1.7159484 6ed6cd0fc2ef568d2297ba68a763d4552324213316001z4The National | School boards sue social media giantsz$md5:4b4db69322fa32186c3ce426da07402ci.fgn@	subtitlesengvttm3u8_native)r   protocolzHhttps://thumbnails.cbc.ca/maven_legacy/thumbnails/607/559/thumbnail.jpegzcount:520240329zcount:4zThe National - Full Showzcount:1NewsCanadazFull Programzcbcplayer:1.7159484Tr"   only_matchingzcbcplayer:2164402062z(http://www.cbc.ca/player/play/2657631896c                     | j                  |      }d|v r2| j                  d| |      }| j                  d|d|      d   d   d   }dd	t        d
|z  ddi      |ddS )N.https://www.cbc.ca/player/play/window\.__INITIAL_STATE__\s*=initial statevideocurrentClipr>   url_transparentThePlatformz\http://link.theplatform.com/s/ExhSPC/media/guid/2655402169/%s?mbr=true&formats=MPEG4,FLV,MP3force_smil_urlT)resproto)_typeie_keyr"   r   _format_sort_fields)rZ   r[   _search_jsonr   )rP   r"   video_idrd   s       r;   rg   zCBCPlayerIE._real_extract#  s    >>#&(?,,/Nxj-Y[cdG((0'++244ACCLNH
 '#nqyy$d| #3	
 		
r<   Nrh   ri   rj   rk   rl   rm   rg   rD   r<   r;   r6   r6      s   G CJ91.A#%"
 C L1
,
5
 U
 A	

 
 :
 

 b
 
 
 BC
 I
 
 1
 m
  T!
" )#
. L1
,
5
 6
 k	

 
 :
 

 q
 
 
 1
 01
 	
 XJ
 *+
  )!
. :1
,
5
 U
   f	

 
 :
 

 b
 
 
 BC
 I
 
 1
 m
  T!
" )#
	0 :1
,
5
 6
 k	

 
 :
 

 q
 
 
 1
 01
 	
 XJ
 *+
  )!
2 :1
/
5
 K
 A	

 
 
 %%]"K!LM
 c
 

 	
 :
 )
 0
 I
 
  !
" .#
4 % & :GFFP
r<   r6   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"   r4   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 N)lower)k_playlist_ids     r;   rF   zDCBCPlayerPlaylistIE._real_extract.<locals>.entries.<locals>.<lambda>P  s    k9Q r<   items.r   r   )r   rO   r6   )r   json_contentr   rP   s    r;   rB   z2CBCPlayerPlaylistIE._real_extract.<locals>.entriesN  sR     (*,QSZ\_ae8  a oo(Gz&RT_``as   7:)urllibparseunquoterZ   r   r[   r   rb   )rP   r"   rd   rB   r   r   s   `   @@r;   rg   z!CBCPlayerPlaylistIE._real_extractH  sr    ll**4>>#+>?EEG((k:((,gU	a ##GI{;;r<   Nr   rD   r<   r;   r   r   7  sF    &GQJ\?
 =%
F<r<   r   c                       e Zd ZdZdZddddddd	d
dg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ddgdddiddddd gZd!gZd"Zd#Zd$Z	d% Z
d& Zd' Zd( Zd) Zd* Zd+ Zd, Zy$)-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/s06e01 93dbb31c74a8e45b378cf13bd3f6f11ezschitts-creek/s06e01r   zSmoke Signalsz$md5:929868d20021c924020641769eb3e7f1z{https://images.radio-canada.ca/v1/synps-cbc/episode/perso/cbc_schitts_creek_season_06e01_thumbnail_v01.jpg?im=Resize=(Size)i"  comedySchitt's CreekSeason 6r3   r   )r   r   r   r   rx   rz   r{   r   r   r   episodeepisode_number
episode_idformatbvr    )r"   r#   r$   paramsr%   z-https://gem.cbc.ca/media/schitts-creek/s01e01 297a9600f554f2258aed01514226a697zschitts-creek/s01e01zThe Cup Runneth Overz$md5:9bca14ea49ab808097530eb05a29e797z{https://images.radio-canada.ca/v1/synps-cbc/episode/perso/cbc_schitts_creek_season_01e01_thumbnail_v01.jpg?im=Resize=(Size)zSeason 1i  )r   r   r   r   rx   r   r   r   r   r   r   rz   r{   z3https://gem.cbc.ca/nadiyas-family-favourites/s01e01Tr   CAz$3f4beddd-2061-49b0-ae80-6f1f2ed65b37cbcgemNc                    t        j                  ||d      j                         }ddi}d| j                  i}| j	                  dd |||      }|d   }|| j                  dd	}| j	                  d
d ||      }|d   }t        j                  d|i      j                         }ddd}| j	                  dd ||d      }|d   }	dd|	d}| j	                  dd |d      }|d   S )N)emailpasswordcontent-typezapplication/jsonapikeyz2https://api.loginradius.com/identity/v2/auth/login)dataheadersqueryaccess_tokenjwt)r   r   jwtappz3https://cloud-api.loginradius.com/sso/jwt/api/token)r   r   	signatureweb)r   ott-device-typez5https://services.radio-canada.ca/ott/cbc-api/v2/token  )r   r   expected_statusaccessToken)r   r   zott-access-tokenz7https://services.radio-canada.ca/ott/cbc-api/v2/profile)r   r   claimsToken)jsondumpsencode_TOKEN_API_KEYrM   )
rP   r   r   r   r   r   respr   sigcbc_access_tokens
             r;   _new_claims_tokenzCBCGemIE._new_claims_token  s?   zz 
  68 	 "#564../""#W#'dG5 # RN+ )))

 ""#X#' # G;zz5#,'..0#5%P""#Z#'dGUX # Z.#5%euv""#\#'# # OM""r<   c                     | j                   j                  d      d   }t        j                  |dz         }t	        j
                  |      d   S )Nr   r   z==exp)_claims_tokenrN   base64urlsafe_b64decoder   loads)rP   b64_datar   s      r;   _get_claims_token_expiryz!CBCGemIE._get_claims_token_expiry  sG     %%++C03''48zz$&&r<   c                 Z    | j                         }|t        j                         z
  dk  ryy)N
   TF)r   time)rP   r   s     r;   claims_token_expiredzCBCGemIE.claims_token_expired  s)    ++-r!r<   c                 D    | j                   d uxr | j                          S r   )r   r   rP   s    r;   claims_token_validzCBCGemIE.claims_token_valid  s$    !!-Qd6O6O6Q2QQr<   c                     | j                         sH| j                  ||      | _        | j                  j	                  | j
                  d| j                         | j                  S Nclaims_token)r   r   r   cachestore_NETRC_MACHINE)rP   r   r   s      r;   _get_claims_tokenzCBCGemIE._get_claims_token  sQ    &&(!%!7!7x!HDJJT00.$BTBTU!!!r<   c                 |    | j                         ry | j                  j                  | j                  d      | _        y r   )r   r   loadr   r   r   s    r;   _real_initializezCBCGemIE._real_initialize  s.    ""$!ZZ__T-@-@.Qr<   c           
   #     K   t        d |D        d      }|syt        j                  dd|d         }t        j                  dd|      }| j                  ||dd	      }t	        |t
        j                  j                  j                        sy|D ]  }|j                  j                  d
      dk7  r"|D ]  }t        |j                  j                  d            }	|	rd|j                  vr8t        |j                  j                  d            }
i |t        d|
      t        j                  dd|	 d|      t        |j                  j                  d            |	dz  |
d   yw)z= Find a valid video url and convert it to the secret variant c              3   J   K   | ]  }|j                  d       dk7  s|  yw)vcodecnoneNrL   ).0fs     r;   	<genexpr>z0CBCGemIE._find_secret_formats.<locals>.<genexpr>  s     L!!%%/V2KALs   ##Nz$(Manifest\(.*?),filter=[\w-]+(.*?\))z\1\2r"   z$(Manifest\(.*?),format=[\w-]+(.*?\))zDownloading secret XMLF)noter@   Typer   BitrateIndex	MaxHeightsecz(QualityLevels\()\d+(\))z\g<1>z\2MaxWidthg     @@)	format_idr"   widthtbrheight)nextr_   sub_download_xml
isinstancexmletreeElementTreeElementattribrL   r   r	   )rP   formatsr   base_formatbase_urlr"   
secret_xmlchildvideo_qualitybitrater  s              r;   _find_secret_formatszCBCGemIE._find_secret_formats  sd    LwLdS66A7KX]L^_ff<gxP''X<T\a'b
*cii&;&;&C&CD 	E||'72!& %m&:&:&>&>y&IJ'1E1E"E$]%9%9%=%=k%JK!!.uf!=66"=%yPR?SU]^()=)=)A)A*)MN"V+$ 	s   E)E+c                    | j                  |      }| j                  d| |d      }| j                         \  }}|r|r| j                  ||      }d|i}ni }| j                  |d   d   ||      }|j	                  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      }
| j                  |
       |
j                  | j                  |
|             |
D ]^  }|j	                  d      dk(  s|j	                  d      d|d<   |j	                  d      d|d<   d|d   j                         v sZd|d<   ` ||d   |j	                  d       |j	                  d!      |j	                  d"      |j	                  d#      d$|j	                  d#       |j	                  d%      |j	                  d      ||j	                  d&      |j	                  d'      g|
|j	                  d(      |j	                  d)      d*S )+Nz7https://services.radio-canada.ca/ott/cbc-api/v2/assets/r   r   zx-claims-tokenplaySessionr"   )r   	errorCoder   r   )	countries#   r   )methodr   z said: z - messagehls)m3u8_idr   r   r   m4aacodecz	mp4a.40.2descriptiver
  
preferencer   r   imager   r   zSeason r   rz   categoryairDateavailableDate)r   r   r   rx   r   r   r   r   r   r   rz   r{   r  release_timestampr   )rZ   rM   _get_login_infor   rL   raise_geo_restrictedraise_login_requiredr   rk   _extract_m3u8_formats_remove_duplicate_formatsra   r  r   )rP   r"   r   
video_infor   r   r   r   	m3u8_infom3u8_urlr  r   s               r;   rg   zCBCGemIE._real_extract  s   >>#&((EhZPc ) +
 ..0xX11%BL'6GG''
=(A%(H(\c'd	=='==%*%%%7]];'2-%%Z%8]];'1, DLL>{9S8TTWXaXeXefoXpWq!rss,,Xx,O&&w/t00(CD 
	.Fzz(#v-::e$,$)F5M::h'/'2F8$ !F;$7$=$=$??+-F<(
	. (%>>-8#0 nnX.'^^H5
x 89:(nnY7!~~g.""z2%>>*56!+	!:#8
 	
r<   )rh   ri   rj   rk   rl   rm   _GEO_COUNTRIESr   r   r   r   r   r   r   r   r   r  rg   rD   r<   r;   r   r   W  s    GZJ ?1($A W#*' &0
 T"*). ?1(+A W' -0#*
 T"*), EU-F^ VN;NNM#>'R"R
@6
r<   r   c            
       D    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 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/s06r   z$md5:6a92104a56cbeb5818cc47884d4326a2r   r3   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   r   r   r   rx   )r"   playlist_countr$   z$https://gem.cbc.ca/schitts-creek/s06Tr   z6https://services.radio-canada.ca/ott/cbc-api/v2/shows/c           
         | j                  |      }|j                  d      }|j                  d      }| j                  | j                  |z   |d      }t	        |j                  d            t        fd|d   D        d       }|t        d d	|       g }|d
   D ]  }|j                  i dddddd|d   z   d|d   d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|j                  d      d|d   d|j                  d      d|j                  d      d|j                  d      d|d   d|j                  d      d|j                  d      g        d }	|j                  d      }
|
|
j                  d      s|
}	d|||d   |j                  d      |	|j                  d      |j                  d      |d   d 	S )!Nr   showr   r   r   c              3   L   K   | ]  }|j                  d       k(  s|  yw)r   Nr   )r   sr   s     r;   r  z1CBCGemPlaylistIE._real_extract.<locals>.<genexpr>@  s!     Y!quuXRX?XAYs   $$seasonszCouldn't find season z of assetsr   r   r   CBCGemr"   zhttps://gem.cbc.ca/media/r   r   rx   r.  r   r   	season_idr   r   r   rz   r{   r/  zdata:r2   )	r   rB   r   r   r   rx   r   r   r   )
_match_valid_urlgrouprM   	_API_BASEintr  r   appendrL   
startswith)rP   r"   matchrG  rA  	show_infoseason_infoepisodesr   rx   tn_urir   s              @r;   rg   zCBCGemPlaylistIE._real_extract9  sp   %%c*KK%	{{6"''(=yZ]'^	U[[*+Yy';Y[_` #9&dV!LMM"8, 	GOO *( 2WT]B gdm	
 W- w{{=9 W[[1 '++h/  X!6 +g. [__T2 !'++i"8 7;;w/ gdm GKK
3  w{{:67! 	( 	) f&7&7&@I   )&??=9"mmG,(__X6!'*

 
	
r<   N)rh   ri   rj   rk   rl   rm   rJ  rg   rD   r<   r;   r=  r=  #  sW    #GqJ <%A'  l
	 6F" II3
r<   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gZd Zy )!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.jpgTAyqZwxRqh8EHr   iX20170413r   )	r   r   rx   is_liver   r   r   r   r   zLive might have ended)r"   r$   r%   zhttps://gem.cbc.ca/live/4444zre:^Ottawa [0-9\-: ]+rX  z/re:https://images.gem.cbc.ca/v1/cbc-gem/live/.*)r   r   rX  r   r   live_statusrx   skip_download)r"   r$   r   r%   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   rX  r   r   rZ  rx   r   r   c                    | j                  |      | j                  |      }| j                  |      d   d   d   }|j                  d      st	        |ddfdt
        hfdi 	      }|j                  d      }|st        d
d      | j                  dddd|ddddd      }| j                  |d   dd      ddt	        |ddddt        hfd      S ) Nprops	pagePropsr   formattedIdMedia)freeTv)streams.r   c                     |d   k(  S )NkeyrD   )r   vr   s     r;   rF   z,CBCGemLiveIE._real_extract.<locals>.<lambda>  s    QRSXQY]eQe r<   F)get_allrY   zBCouldn't find video metadata, maybe this livestream is now offlineT)expectedz5https://services.radio-canada.ca/media/validation/v2/mpxhdipadtruer   r'  desktop)appCodeconnectionType
deviceTypeidMediamultibitrateoutputtechmanifestType)r   r"   r   )live)r   r  rX  r   r   )imagescardr"   r0  )r   r   rx   r   )
rZ   r[   _search_nextjs_datarL   r   dictr   rM   r6  r   )rP   r"   rd   r8  video_stream_idstream_datar   s         @r;   rg   zCBCGemLiveIE._real_extract  s+   >>#&((h7--gx@I+VW]^
 ~~01%97Dehlgmnr+J %..);< !fquvv))CX "&$* &  )	V * 
 11+e2DhPU\`1a

 : ,6'-9	( 	

 
	
r<   Nr   rD   r<   r;   rT  rT  o  s    GEJ :!V M$')&
 ,	
  01V(O '-+	
 9o  z(O')
 '-+	
=.F`%
r<   rT  )r   r   r_   r   urllib.parser   xml.etree.ElementTreer  commonr   compatr   utilsr   r   r	   r
   r   r   r   r   r   r   r   r6   r   r   r=  rT  rD   r<   r;   <module>r     s      	    !  {2M {2|\
- \
~<- <@I
} I
XI
} I
XX
= X
r<   