U
    g                     @   s\   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 ddlmZ G dd deZdS )	   )InfoExtractor   )	HTTPError)ExtractorErrorint_or_noneparse_iso8601parse_qstry_get
update_urlurl_or_none)traverse_objc                   @   s   e 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gZd"Zd#d$ Zd%d& Zd'd( Zd)d* Z	d+S ),OlympicsReplayIEzshttps?://(?:www\.)?olympics\.com/[a-z]{2}/(?:paris-2024/)?(?:replay|videos?|original-series/episode)/(?P<id>[\w-]+)zRhttps://olympics.com/fr/video/men-s-109kg-group-a-weightlifting-tokyo-2020-replaysz$f6a0753c-8e6f-4b7d-a435-027054a4f8e9mp4u;   +109kg (H) Groupe A - Haltérophilie | Replay de Tokyo 2020Z20210801i`8az$md5:c66af4a5bc7429dbcc43d15845ff03b3zUhttps://img.olympics.com/images/image/private/t_1-1_1280/primary/nua4o7zwyaznoaejpbk2g     i@)idexttitleupload_date	timestampdescription	thumbnailduration)url	info_dictzvhttps://olympics.com/en/original-series/episode/b-boys-and-b-girls-take-the-spotlight-breaking-life-road-to-paris-2024z$32633650-c5ee-4280-8b94-fb6defb6a9b5z<B-girl Nicka - Breaking Life, Road to Paris 2024 | Episode 1Z20240517iJGfz$md5:f63d728a41270ec628f6ac33ce471bb1zUhttps://img.olympics.com/images/image/private/t_1-1_1280/primary/a3j96l7j6so3vyfijby1g     @zmhttps://olympics.com/en/paris-2024/videos/men-s-preliminaries-gbr-esp-ned-rsa-hockey-olympic-games-paris-2024z$3d96db23-8eee-4b7c-8ef5-488a0361026czIMen's Preliminaries GBR-ESP & NED-RSA | Hockey | Olympic Games Paris 2024Z20240727if)r   r   r   r   r   z,Geo-restricted to RU, BR, BT, NP, TM, BD, TL)r   r   skipzhttps://olympics.com/en/paris-2024/videos/dnp-suni-lee-i-have-goals-and-i-have-expectations-for-myself-but-i-also-am-trying-to-give-myself-gracez$a42f37ab-8a74-41d0-a7d9-af27b7b02a90z$md5:c7cfbc9918636a98e66400a812e4d407Z20240729i	fFc                 C   s:  t | j||i ddddddd dd	thtf	}|s6d S t |d
dthf}t |dthfrd| j|d t |dthfdk}t |dthfp|d }| ||d ||}z| j	||ddd\}}	W nJ t
k
r }
 z*t|
jtrd|
jjkr| j|d  W 5 d }
~
X Y nX ||	|dt |dthfdthfdthfdS )NdefaultpropsZ	pagePropspageitemsc                 S   s   |d dkS )NnameZvideoPlaylist )_vr    r    =/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/olympics.py<lambda>B       z<OlympicsReplayIE._extract_from_nextjs_data.<locals>.<lambda>dataZcurrentVideo	countries.ZgeoRestrictedVideo)r'   ZstreamingStatusZLIVEZvideoUrlZ	streamUrlZjwtTokenr   hlsZm3u8_idZgeorestricted)formats	subtitlesis_liveZvideoIDr   ZcontentDate)r   r   r   )r   Z_search_nextjs_datadictanystrboolZraise_geo_restrictedr   _tokenize_url#_extract_m3u8_formats_and_subtitlesr   
isinstancecauser   msgr   )selfwebpagevideo_idr&   Zgeo_countriesr,   m3u8_urlZtokenized_urlr*   r+   er    r    r#   _extract_from_nextjs_data?   sP              z*OlympicsReplayIE._extract_from_nextjs_datac              	   C   s:   | j d|dt|t|d d|r"dnd|ddd d S )	Nz,https://metering.olympics.com/tokengeneratorzDownloading tokenized m3u8 urlqueryZliveZvod)r   z
service-idz	user-authr&   r   )_download_jsonr   r
   )r6   r   tokenr,   r8   r    r    r#   r1   a   s     

zOlympicsReplayIE._tokenize_urlc                 C   s   | j d|dd|idS )Nz#https://olympics.com/tokenGeneratorz%Downloading legacy tokenized m3u8 urlr   r<   )r>   )r6   r   r8   r    r    r#   _legacy_tokenize_urlk   s      z%OlympicsReplayIE._legacy_tokenize_urlc                    s>  |  |}| ||}| || }r*|S | d|}| d|}| d|}| ||}|d}	|	s| jd|ddd}	|	d	dd
dd}	dd |	D }	g }
|	D ]`}| j	d|dddd\ }t
t
 t
|   }|
||t
t| fddd q| j| |||ddd\}}|||
||d|S )N)r   zog:titleztwitter:titleZepisode_uidZ	video_urlimagez&["\']image["\']:\s*["\']([^"\']+)["\']Zimages r   [],c                 S   s   g | ]}|  qS r    )strip).0r   r    r    r#   
<listcomp>   s     z2OlympicsReplayIE._real_extract.<locals>.<listcomp>z[/images/image/private/t_(?P<width_a>\d+)-(?P<height_a>\d+)_(?P<width>\d+)/primary/[\W\w\d]+Zthumb)r   r      )NNN)groupr   c                    s   |    S )Nr    )xZheight_aZwidth_ar    r#   r$      r%   z0OlympicsReplayIE._real_extract.<locals>.<lambda>)r   widthheightr   r(   r)   )r   r   
thumbnailsr*   r+   )Z	_match_idZ_download_webpager;   Z_html_search_metaZ_search_json_ldgetZ_html_search_regexreplacesplitZ_search_regexr   appendr	   r2   r@   )r6   r   r8   r7   infor   Z
video_uuidr9   Zjson_ldZthumbnails_listrO   r   rM   r*   r+   r    rL   r#   _real_extractp   s^    

      

   
zOlympicsReplayIE._real_extractN)
__name__
__module____qualname__Z
_VALID_URLZ_TESTSZ_GEO_BYPASSr;   r1   r@   rU   r    r    r    r#   r      s\   ,"
r   N)commonr   Znetworking.exceptionsr   utilsr   r   r   r   r	   r
   r   Zutils.traversalr   r   r    r    r    r#   <module>   s   $	