
    Ği                      ~    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dS )	    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d)S )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          |                     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    YC:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/extractor/rtp.py_fetch_auth_tokenzRTPIE._fetch_auth_tokenI   s     	$##'(;(;G@!5&h+:".  06=8 =8 =8 :>,6X )< 
) 
) #GcU3
5 
5     c                     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    s    r@   _cleanup_media_urlzRTPIE._cleanup_media_urlY   sJ    <  %%,0KKK4{{;0088xPPPrB   c                    g }i }t          t          |dt          h| j        hf                    D ]}t	          |          }|dk    rI|                     ||dd          \  }}|                    |           |                     ||           `|dk    rI|                     ||dd	          \  }}|                    |           |                     ||           |	                    |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_   sC   	\*s[MDLcKd6effgg 	 	I	**Cf}}!EEz5 F G G
dt$$$%%d9%====!DDz& E G G
dt$$$%%d9%====$!'        	!!rB   c                    |                                  }|sd S t          |                     d| d|dd           |ddddd| | j        dd	
          dt          h          }|sd S t          |dddt          hf          }t          |d          }|                     ||          \  }}t          |ddd f          D ]\}	|                    |	                    d          pdg                               |	d         |	                    d          d           ]|||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    XcdefldmXnXn 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   sk   ++--
 	F#D$7$7VVVjQRQSQSnVVXb%+&II!7:!7!7".   %8 % % &v/ /  	F!,1kD60RSS
!* /[ \ \
!22:zJJ$Z+zKnKn1opp 	 	H  f!5!5!=rBBII' Z00K K     "%lXqBSVaUb4cdd	
 

 <)<seVSQ03%@ JSESY[^_0=33O3O3O2PQ'<}WZ?[?[?[>\&]8>:JK+cUF;#3k]"C+cUF;*SE6:6 6 *  
 	
rB   z(?xs)
        atob\s*\(\s*decodeURIComponent\s*\(\s*
            (\[[0-9A-Za-z%,'"]*\])
        \s*\.\s*join\(\s*(?:""|'')\s*\)\s*\)\s*\)
    c                 :    | j                             d |          S )Nc                    t          j        t          j        t          j                            d                    t          j        | 	                    d                                                  
                    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>   sf    dj !5!5GGDJqwwqzz2233" "  6,'') ) rB   )_RX_OBFUSCATIONsub)r?   datas     r@   __unobfuscatezRTPIE.__unobfuscate   s,    #'') )   	rB   c           	         |                      ||          }g }i }t          t          j        d|          d| j        ht
          ht          j        ht          j	        hdft          j        hff          }| 
                    ||          \  }}||||                     ddg|d           |                     ddg|d           d	|                     ||i           d
|                     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   s4   ((j99	!"*-jls"t"t4%&tzlT[MSVWZ^ZdYefwh i i
!22:zJJ "113CEZ2[]dnr1ss//_0Mw`d/ee
 
 ""7J"CC
 T++Z,I7\`+aa
 
 	
rB   c                     |                      |                              dd          \  }}|                     ||          p|                     ||          S )Nr   r   )_match_valid_urlr   r   r   )r?   r    r   r[   s       r@   _real_extractzRTPIE._real_extract   sX    !%!6!6s!;!;!A!A,PT!U!U
J%%j*==iAXAXY\^hAiAi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 \Q
" " ",*
 *
 *
X !bj " 	 	O  
 
 
&j j j j jrB   r   )r   r   r   urllib.parserD   commonr   r   utilsr   r   r	   r
   r   r   utils.traversalr   r   r   rB   r@   <module>r      s      				     * * * * * * * *                + * * * * *rj rj rj rj rjM rj rj rj rj rjrB   