
    VGh                      v    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e      Zy)	    N   )InfoExtractorRequest   )determine_extint_or_none
js_to_jsonparse_durationparse_iso8601url_or_none)traverse_objc                       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* Zed+        Z	d, Z
d- Z ej                  d.      Zd/ Zd0 Zd1 Zy))2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                     | j                   r| j                   S t        | j                  t        ddddd| j                  dddi	      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)selfs    ]/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/rtp.py_fetch_auth_tokenzRTPIE._fetch_auth_tokenI   s    ###'(;(;G@!5&h+:".. 06=8 :>,6X )< 
) #GcU3
5     c                     t         j                  j                  |       j                  dk(  ry | j	                  dd      j	                  dd      S )Nzstreaming-ondemand.rtp.ptz	/drm-fps/z/hls/z
/drm-dash/z/dash/)urllibparseurlparsenetlocreplace)r    s    r@   _cleanup_media_urlzRTPIE._cleanup_media_urlY   sA    <<  %,,0KK{{;088xPPrB   c                    g }i }t        t        |dt        h| j                  hf            D ]  }t	        |      }|dk(  r=| j                  ||dd      \  }}|j                  |       | j                  ||       P|dk(  r=| j                  ||dd	      \  }}|j                  |       | j                  ||       |j                  |d
d        ||fS )N.m3u8hlsF)m3u8_idr9   )targetmpddash)mpd_idr9   http)r    	format_id)
setr   r   rI   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subss	            r@   _extract_formatszRTPIE._extract_formats_   s    	\*s[MDLcLcKd6efg 	I	*Cf}!EEz5 F G
dt$%%d9%=!DDz& E G
dt$%%d9%=$!'  	" 	!!rB   c                 6   | j                         }|sy t        | j                  d| d|dd   |ddddd| | j                  dd	
      dt        h      }|sy t        |dddt        hf      }t        |d      }| j                  ||      \  }}t        |ddd f      D ]K  }	|j                  |	j                  d      xs dg       j                  |	d   |	j                  d      d       M |||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       hfd!t        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 )r2   Authorizationr3   F)queryr5   r9   resultassetsr   	asset_url))))rL   rP   
stream_url)multibitrate)url_hlsurl_dashr]   vtt_listc                     t        |d         S )Nfile)r   )_vs     r@   <lambda>z)RTPIE._extract_from_api.<locals>.<lambda>   s    XcdefldmXn rB   codeptrr   language)r    nameasset_thumbnail)r   r\   r]   r   r)   )episode_titleprogram_titleepisode_subtitle)episode_descriptionepisode_summaryepisode_air_date )	delimiterepisode_lastchangedepisode_duration_completer{   r(   program_seasonr|   )
r   	alt_titler   r   r   r   r)   r(   seasonr   )rA   r   r<   r=   dictra   
setdefaultgetrY   r   r>   filteranyr   r
   r   )
r?   
program_idr[   
auth_tokenepisode_data
asset_urlsrZ   r\   r]   sub_datas
             r@   _extract_from_apizRTPIE._extract_from_apiu   s   ++-
#D$7$78AjQRQSnEUVXb%+&I#*:,!7"..  %8 % &v/ !,1kD60RS
!* /[ \
!22:zJ$Z+zKn1op 	H  f!5!=rBII' Z0K 	 "%lXqBSVaUb4cd	

 <)<seVSQ03%@ JSESY[^_0=33O2PQ'<}WZ?[>\&]8>:JK+cUF;#3k]"C+cUF;*SE6:6 * 
 	
rB   z(?xs)
        atob\s*\(\s*decodeURIComponent\s*\(\s*
            (\[[0-9A-Za-z%,'"]*\])
        \s*\.\s*join\(\s*(?:""|'')\s*\)\s*\)\s*\)
    c                 <    | j                   j                  d |      S )Nc                    t        j                  t        j                  t        j
                  j                  dj                  t        j                  | j                  d                              j                  d            S )N r   z
iso-8859-1)jsondumpsbase64	b64decoderD   rE   unquotejoinloadsgroupdecode)ms    r@   ru   z%RTPIE.__unobfuscate.<locals>.<lambda>   sU    djj  !5!5GGDJJqwwqz23" 6,') rB   )_RX_OBFUSCATIONsub)r?   datas     r@   __unobfuscatezRTPIE.__unobfuscate   s%    ##'')  	rB   c           	         | j                  ||      }g }i }t        t        j                  d|      d| j                  ht
        ht        j                  ht        j                  hdft        j                  hff      }| j                  ||      \  }}|||| j                  ddg|d       | j                  ddg|d       d	| j                  ||i       d
| j                  ddg|d       iS )Nz:(?:var\s+f\s*=|RTPPlayer\({[^}]+file:)\s*({[^}]+}|"[^"]+").zog:descriptionztwitter:description)defaultzog:imageztwitter:image)r   r\   r]   r   r   r   zog:titleztwitter:title)_download_webpager   refindall_RTPIE__unobfuscater	   r   r   r   valuesra   _html_search_meta_search_json_ld)r?   r    r[   webpager\   r]   rZ   s          r@   _extract_from_htmlzRTPIE._extract_from_html   s   ((j9	!"**-jls"t4%%&tzzlT[[MSVWZ^ZdZdYefwh i
!22:zJ "113CEZ2[]dnr1s//_0Mw`d/e
 ""7J"C
 T++Z,I7\`+a
 	
rB   c                     | j                  |      j                  dd      \  }}| j                  ||      xs | j                  ||      S )Nr   r   )_match_valid_urlr   r   r   )r?   r    r   r[   s       r@   _real_extractzRTPIE._real_extract   sL    !%!6!6s!;!A!A,PT!U
J%%j*=iAXAXY\^hAiirB   )__name__
__module____qualname__
_VALID_URL_TESTSr=   r;   rA   staticmethodrI   ra   r   r   compiler   r   r   r    rB   r@   r   r      s    bJE1(A0)",'#%
" [1.A0#%",40'
( T1,A%#`	
	E0Fd \KK   Q Q
",*
X !bjj " 	O
&jrB   r   )r   r   r   urllib.parserD   commonr   r   utilsr   r   r	   r
   r   r   utils.traversalr   r   r   rB   r@   <module>r      s3      	  *  +rjM rjrB   