a
    h                      @   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-cruzadasZ e736ce0c665e459ddb818546220b4ef8Ze174042Zmp3u   Paixões Cruzadasz$md5:af979e58ba0ab73f78435fc943fdb070zre:^https?://.*\.jpgg     @i{\Z20190327iyTZ20141129)idexttitledescription	thumbnailseriesdurationmodified_timestampmodified_date	timestampupload_date)urlmd5Z	info_dictzIhttps://www.rtp.pt/play/zigzag/p13166/e757904/25-curiosidades-25-de-abrilZ 5b4859940e3adef61247a77dfb76046aZe757904Zmp4u   Estudar ou não estudarz$md5:3bfd7eb8bebfd5711a08df69c9c14c35ii
fg     @b@Z20240401i/fz25 Curiosidades, 25 de Abrilr   Z20240404)r   r   r   r   r   r   r   r   r   r   episode_numberepisoder   zBhttps://www.rtp.pt/play/estudoemcasa/p7776/e500050/portugues-1-anoZ 57660c0b46db9f22118c52cbd65975e4Ze500050u   Português - 1.º anog     @z$md5:be68925c81269f8c6886589f25fe83eaZ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*/*ZRTPPLAY_MOBILE_IOSZ@fac9c328b2f27e26e03d7f8942d66c05b3e59371e16c2a079f5c83cc801bd3eeZ2145973229682)Acceptzrtp-play-authzrtp-play-auth-hashzrtp-play-auth-timestamp
User-AgentZkeep_header_casingT)headers
extensionszFetching guest auth tokenz Could not fetch guest auth tokenF)ZnoteZerrnotefataltoken)_AUTH_TOKENr   _download_jsonr   _USER_AGENTstr)self r)   I/mnt/pikpak/tmp/myenv/lib/python3.9/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 ]}t|}|dkrf| j||ddd\}}|| | j||d q"|dkr| j||ddd	\}}|| | j||d q"|	|d
d q"||fS )N.Zm3u8hlsF)Zm3u8_idr"   )targetZmpddash)Zmpd_idr"   http)r   Z	format_id)
setr   r   r1   r   Z#_extract_m3u8_formats_and_subtitlesextendZ_merge_subtitlesZ"_extract_mpd_formats_and_subtitlesappend)	r(   
media_urls
episode_idformats	subtitlesZ	media_urlr   Z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}|s`d S t|dddthf}t|d}| ||\}}t|dddd fD ]0}	||	dpdg |	d |	dd q|||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)Zinclude_assetsZinclude_webparamsr   zBearer )r   Authorizationr   F)queryr    r"   resultZassetsr   Z	asset_url))))r2   r4   Z
stream_url)Zmultibitrate)Zurl_hlsZurl_dashr<   Zvtt_listc                 S   s   t |d S )Nfile)r   )_vr)   r)   r*   <lambda>       z)RTPIE._extract_from_api.<locals>.<lambda>codeptrD   language)r   nameZasset_thumbnail)r   r;   r<   r   r   )episode_titleprogram_titleZepisode_subtitle)Zepisode_descriptionZepisode_summaryZepisode_air_date )	delimiterZepisode_lastchangedZepisode_duration_completerM   r   Zprogram_seasonrN   )
r   Z	alt_titler   r   r   r   r   r   Zseasonr   )r+   r   r%   r&   dictr>   
setdefaultgetr8   r   r'   filteranyr
   r	   r   )
r(   
program_idr:   Z
auth_tokenZepisode_dataZ
asset_urlsr9   r;   r<   Z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,   r-   unquotejoinloadsgroupdecode)mr)   r)   r*   rG      s   
z%RTPIE.__unobfuscate.<locals>.<lambda>)_RX_OBFUSCATIONsub)r(   datar)   r)   r*   Z__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   r;   r<   r   r   r   zog:titleztwitter:title)Z_download_webpager   refindall_RTPIE__unobfuscater   rY   r_   rQ   valuesr>   Z_html_search_metaZ_search_json_ld)r(   r   r:   Zwebpager;   r<   r9   r)   r)   r*   _extract_from_html   s"    $zRTPIE._extract_from_htmlc                 C   s.   |  |dd\}}| ||p,| ||S )NrV   r   )Z_match_valid_urlr`   rW   rl   )r(   r   rV   r:   r)   r)   r*   _real_extract   s    zRTPIE._real_extract)__name__
__module____qualname__Z
_VALID_URLZ_TESTSr&   r$   r+   staticmethodr1   r>   rW   rh   compilerc   rj   rl   rm   r)   r)   r)   r*   r      sr   2
,
r   )r[   rY   rh   urllib.parser,   commonr   r   utilsr   r   r   r	   r
   r   Zutils.traversalr   r   r)   r)   r)   r*   <module>   s    