
    V|h                      v    S SK r S SKrS SKrS SKrSSKJrJr  SSKJ	r	J
r
JrJrJrJr  SSKJr   " S S\5      rg)	    N   )InfoExtractorRequest   )determine_extint_or_none
js_to_jsonparse_durationparse_iso8601url_or_none)traverse_objc                       \ rS rSrSrSSSSSSS	SS
SSSSS.S.SSSSSSS	SSSSSSSSS.S.SS S!SS"S#S$S%S&S'S(.S./rS)rS*rS+ r\	S, 5       r
S- rS. r\R                  " S/5      rS0 rS1 rS2 rS3rg*)4RTPIE   zNhttps?://(?: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                     U R                   (       a  U R                   $ [        U R                  [        SSSSSU R                  S.SS0S	9S S
SSS9SS[
        145      U l         U R                   $ )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    N/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/rtp.py_fetch_auth_tokenRTPIE._fetch_auth_tokenI   s    ###'(;(;G@!5&h+:".. 06=8 :>,6X )< 
) #GcU3
5     c                     [         R                  R                  U 5      R                  S:X  a  g U R	                  SS5      R	                  SS5      $ )Nzstreaming-ondemand.rtp.ptz	/drm-fps/z/hls/z
/drm-dash/z/dash/)urllibparseurlparsenetlocreplace)r!   s    rA   _cleanup_media_urlRTPIE._cleanup_media_urlY   sA    <<  %,,0KK{{;088xPPrD   c                    / n0 n[        [        US[        1U R                  145      5       H  n[	        U5      nUS:X  a5  U R                  XRSSS9u  pxUR                  U5        U R                  XS9  MI  US:X  a5  U R                  XRSSS	9u  pxUR                  U5        U R                  XS9  M  UR                  US
S.5        M     X44$ )N.m3u8hlsF)m3u8_idr:   )targetmpddash)mpd_idr:   http)r!   	format_id)
setr   r   rK   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	            rA   _extract_formatsRTPIE._extract_formats_   s    	\*s[MDLcLcKd6efgI	*Cf}!EE5 F G
t$%%d%=!DD& E G
t$%%d%=$!'   h" !!rD   c                 B   U R                  5       nU(       d  g [        U R                  SU SUSS   3USSS.SSU 3U R                  S.S	S
9S[        15      nU(       d  g [        USSS[        145      n[        US5      nU R                  Xb5      u  px[        USSS 45       HQ  n	UR                  U	R                  S5      =(       d    S/ 5      R                  U	S   U	R                  S5      S.5        MS     UUU[        USSS[        145      S.[        USS[        1[        [        4S[        1[        4S[        1[        [        4S[        SS 914S![        SS 914S"[        14S#[        1[        4S$[        14S%[        1[        4S&[        1[        4S'.
45      E$ )(Nz*https://www.rtp.pt/play/api/1/get-episode//r   true)include_assetsinclude_webparamsr/   zBearer )r3   Authorizationr4   F)queryr6   r:   resultassetsr   	asset_url))))rO   rS   
stream_url)multibitrate)url_hlsurl_dashr`   vtt_listc                     [        US   5      $ )Nfile)r   )_vs     rA   <lambda>)RTPIE._extract_from_api.<locals>.<lambda>   s    XcdefldmXnrD   codeptrv   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   )rB   r   r=   r>   dictrd   
setdefaultgetr\   r   r?   filteranyr   r
   r   )
r@   
program_idr^   
auth_tokenepisode_data
asset_urlsr]   r_   r`   sub_datas
             rA   _extract_from_apiRTPIE._extract_from_apiu   s   ++-
#D$7$78AjQRQSnEUVXb%+&I#*:,!7"..  %8 % &v/ !,1kD60RS
!* /[ \
!22:J$Z+zKn1opH  f!5!=rBII' Z0K  q "%lXqBSVaUb4cd	

 <)<seVSQ03%@ JSESY[^_0=33O2PQ'<}WZ?[>\&]8>:JK+cUF;#3k]"C+cUF;*SE6:6 * 
 	
rD   z(?xs)
        atob\s*\(\s*decodeURIComponent\s*\(\s*
            (\[[0-9A-Za-z%,'"]*\])
        \s*\.\s*join\(\s*(?:""|'')\s*\)\s*\)\s*\)
    c                 <    U R                   R                  S U5      $ )Nc                    [         R                  " [        R                  " [        R
                  R                  SR                  [         R                  " U R                  S5      5      5      5      5      R                  S5      5      $ )N r   z
iso-8859-1)jsondumpsbase64	b64decoderF   rG   unquotejoinloadsgroupdecode)ms    rA   ry   %RTPIE.__unobfuscate.<locals>.<lambda>   sS    djj  !5!5GGDJJqwwqz23" 6,')rD   )_RX_OBFUSCATIONsub)r@   datas     rA   __unobfuscateRTPIE.__unobfuscate   s%    ##'')  	rD   c           
         U R                  X5      n/ n0 n[        [        R                  " SU5      SU R                  1[
        1[        R                  1[        R                  1S4[        R                  1445      nU R                  Xb5      u  pEUUUU R                  SS/US S9U R                  SS/US S9S	.U R                  X20 S9ES
U R                  SS/US S90E$ )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   valuesrd   _html_search_meta_search_json_ld)r@   r!   r^   webpager_   r`   r]   s          rA   _extract_from_htmlRTPIE._extract_from_html   s   ((9	!"**-jls"t4%%&tzzlT[[MSVWZ^ZdZdYefwh i
!22:J "113CEZ2[]dnr1s//_0Mw`d/e
 ""7"C
 T++Z,I7\`+a
 	
rD   c                     U R                  U5      R                  SS5      u  p#U R                  X#5      =(       d    U R                  X5      $ )Nr   r   )_match_valid_urlr   r   r   )r@   r!   r   r^   s       rA   _real_extractRTPIE._real_extract   sE    !%!6!6s!;!A!A,PT!U
%%j=iAXAXY\AiirD   )r<   )__name__
__module____qualname____firstlineno__
_VALID_URL_TESTSr>   r<   rB   staticmethodrK   rd   r   r   compiler   r   r   r   __static_attributes__ rD   rA   r   r      s    bJE1(A0)",'#%
" [1.A0#%",40'
( T1,A%#`	
	E0Fd \KK   Q Q
",*
X jj " 	O
&jrD   r   )r   r   r   urllib.parserF   commonr   r   utilsr   r   r	   r
   r   r   utils.traversalr   r   r   rD   rA   <module>r      s3      	  *  +rjM rjrD   