o
    i                      @   sp   d dl Z d dlZd dlZd dlZddlmZmZ ddl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 )	    N   )InfoExtractorRequest   )determine_extint_or_none
js_to_jsonparse_durationparse_iso8601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#d$d%d&d'dgZd(Zd)Zd*d+ Zed,d- Z	d.d/ Z
d0d1 Zed2Zd3d4 Zd5d6 Zd7d8 Zd)S )9RTPIEzNhttps?://(?:www\.)?rtp\.pt/play/(?:[^/#?]+/)?p(?P<program_id>\d+)/(?P<id>e\d+)z4http://www.rtp.pt/play/p405/e174042/paixoes-cruzadas e736ce0c665e459ddb818546220b4ef8e174042mp3u   Paixões Cruzadasz$md5:af979e58ba0ab73f78435fc943fdb070zre:^https?://.*\.jpgg     @i{\20190327iyT20141129)idexttitledescription	thumbnailseriesdurationmodified_timestampmodified_date	timestampupload_date)urlmd5	info_dictzIhttps://www.rtp.pt/play/zigzag/p13166/e757904/25-curiosidades-25-de-abril 5b4859940e3adef61247a77dfb76046ae757904mp4u   Estudar ou não estudarz$md5:3bfd7eb8bebfd5711a08df69c9c14c35ii
fg     @b@20240401i/fz25 Curiosidades, 25 de Abrilr   20240404)r   r   r   r   r   r   r   r   r   r   episode_numberepisoder   zBhttps://www.rtp.pt/play/estudoemcasa/p7776/e500050/portugues-1-ano 57660c0b46db9f22118c52cbd65975e4e500050u   Português - 1.º anog     @z$md5:be68925c81269f8c6886589f25fe83ea20201020i_zEhttps://cdn-images.rtp.pt/EPG/imagens/39482_59449_64850.png?v=3&w=860)r   r   r   r   r   r   r   r   zGrtpplay/2.0.66 (pt.rtp.rtpplay; build:2066; iOS 15.8.3) Alamofire/5.9.1Nc              
   C   sR   | j r| j S t| jtddddd| jdddid	d d
dddddthf| _ | j S )Nz2https://rtpplayapi.rtp.pt/play/api/2/token-manager*/*RTPPLAY_MOBILE_IOS@fac9c328b2f27e26e03d7f8942d66c05b3e59371e16c2a079f5c83cc801bd3ee2145973229682)Acceptzrtp-play-authzrtp-play-auth-hashzrtp-play-auth-timestamp
User-Agentkeep_header_casingT)headers
extensionszFetching guest auth tokenz Could not fetch guest auth tokenF)noteerrnotefataltoken)_AUTH_TOKENr   _download_jsonr   _USER_AGENTstr)self r=   H/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/rtp.py_fetch_auth_tokenI   s&   

zRTPIE._fetch_auth_tokenc                 C   s*   t j| jdkrd S | ddddS )Nzstreaming-ondemand.rtp.ptz	/drm-fps/z/hls/z
/drm-dash/z/dash/)urllibparseurlparsenetlocreplace)r   r=   r=   r>   _cleanup_media_urlY   s   zRTPIE._cleanup_media_urlc           	      C   s   g }i }t t|dth| jhfD ]F}t|}|dkr3| j||ddd\}}|| | j||d q|dkrO| j||ddd	\}}|| | j||d q|	|d
d q||fS )N.m3u8hlsF)m3u8_idr6   )targetmpddash)mpd_idr6   http)r   	format_id)
setr   r   rE   r   #_extract_m3u8_formats_and_subtitlesextend_merge_subtitles"_extract_mpd_formats_and_subtitlesappend)	r<   
media_urls
episode_idformats	subtitles	media_urlr   fmtssubsr=   r=   r>   _extract_formats_   s*   




zRTPIE._extract_formatsc           
      C   sn  |   }|sd S t| jd| d|dd   |ddddd| | jdd	d
dth}|s0d S t|dddthf}t|d}| ||\}}t|dddd fD ]}	||	dp[dg |	d |	dd qQ|||t|dddt	hfdt|ddt
httfdt
htfdt
httfdtd d!hfd"td d!hfd#thfd$t
htfd%thfd&t
htfd't
htfd(
fS ))Nz*https://www.rtp.pt/play/api/1/get-episode//r   true)include_assetsinclude_webparamsr+   zBearer )r/   Authorizationr0   F)queryr2   r6   resultassetsr   	asset_url))))rG   rK   
stream_url)multibitrate)url_hlsurl_dashrX   vtt_listc                 S   s   t |d S )Nfile)r   )_vr=   r=   r>   <lambda>   s    z)RTPIE._extract_from_api.<locals>.<lambda>codeptrk   language)r   nameasset_thumbnail)r   rW   rX   r   r'   )episode_titleprogram_titleepisode_subtitle)episode_descriptionepisode_summaryepisode_air_date )	delimiterepisode_lastchangedepisode_duration_completert   r&   program_seasonru   )
r   	alt_titler   r   r   r   r'   r&   seasonr   )r?   r   r9   r:   dictr\   
setdefaultgetrT   r   r;   filteranyr
   r	   r   )
r<   
program_idrV   
auth_tokenepisode_data
asset_urlsrU   rW   rX   sub_datar=   r=   r>   _extract_from_apiu   sT   





zRTPIE._extract_from_apiz(?xs)
        atob\s*\(\s*decodeURIComponent\s*\(\s*
            (\[[0-9A-Za-z%,'"]*\])
        \s*\.\s*join\(\s*(?:""|'')\s*\)\s*\)\s*\)
    c                 C   s   | j dd |S )Nc                 S   s0   t ttjdt | 	d
dS )N r   z
iso-8859-1)jsondumpsbase64	b64decoder@   rA   unquotejoinloadsgroupdecode)mr=   r=   r>   rn      s    
z%RTPIE.__unobfuscate.<locals>.<lambda>)_RX_OBFUSCATIONsub)r<   datar=   r=   r>   __unobfuscate   s   zRTPIE.__unobfuscatec              	   C   s   |  ||}g }i }ttd|d| jhthtjhtj	hdftjhff}| 
||\}}|||| jddg|d d| jddg|d dd	| j||i dd
| jddg|d diS )Nz:(?:var\s+f\s*=|RTPPlayer\({[^}]+file:)\s*({[^}]+}|"[^"]+").zog:descriptionztwitter:description)defaultzog:imageztwitter:image)r   rW   rX   r   r   r   zog:titleztwitter:title)_download_webpager   refindall_RTPIE__unobfuscater   r   r   r   valuesr\   _html_search_meta_search_json_ld)r<   r   rV   webpagerW   rX   rU   r=   r=   r>   _extract_from_html   s"   $zRTPIE._extract_from_htmlc                 C   s.   |  |dd\}}| ||p| ||S )Nr   r   )_match_valid_urlr   r   r   )r<   r   r   rV   r=   r=   r>   _real_extract   s   zRTPIE._real_extract)__name__
__module____qualname__
_VALID_URL_TESTSr:   r8   r?   staticmethodrE   r\   r   r   compiler   r   r   r   r=   r=   r=   r>   r      st    2

,r   )r   r   r   urllib.parser@   commonr   r   utilsr   r   r   r	   r
   r   utils.traversalr   r   r=   r=   r=   r>   <module>   s     