o
    i[                     @   s|   d dl Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZ G dd	 d	eZG d
d deZG dd deZdS )    N   )InfoExtractor   )Request)	HTTPError)ExtractorError
clean_htmlint_or_noneparse_age_limittry_getc                   @   s@   e Zd ZdZdZdZdZdZdZdZ	dd	 Z
d
d Zdd ZdS )
HRTiBaseIEz
        Base Information Extractor for Croatian Radiotelevision
        video on demand site https://hrti.hrt.hr
        Reverse engineered from the JavaScript app in app.min.js
    hrtihrz1.1
all_in_onezBhttp://clientapi.hrt.hr/client_api.php/config/identify/format/jsonNc                 C   s   d| j i}| j| jd ddt| dd }|| j | jd}t| jt| d}dd	 |_| j|d d
dd}|d | _	|d }|d d d d j
| j| j d| _|d d d d d j
| j	d| _|d d d d | _d S )Napplication_publication_idzDownloading uuidzUnable to download uuidnoteerrnotedatauuid)r   r   application_version)r   c                   S   s   dS )NPUT r   r   r   I/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/hrti.py<lambda>.   s    z2HRTiBaseIE._initialize_pre_login.<locals>.<lambda>zDownloading session informationz&Unable to download session information)r   r   
session_idmodulesvod_catalog	resourcessearchuri)languageapplication_iduserlogin/format/json)r   logout)_APP_PUBLICATION_ID_download_json_API_URLjsondumpsencode_APP_VERSIONr   
get_method_session_idformat_APP_LANGUAGE_search_url
_login_url_logout_url)self	init_datar   app_datareqr   r   r   r   r   _initialize_pre_login   s>   

z HRTiBaseIE._initialize_pre_loginc              
   C   s   ||d}z| j | jd ddt| d}W n, tyC } z t|jtr8|jj	dkr8| 
|jj  d }n W Y d }~nd }~ww |di d}|r[t| j d| d	d
|d | _d S )N)usernamepasswordz
Logging inzUnable to log inr   i  errormessagez said: T)expectedsecure_streaming_token)r(   r3   r*   r+   r,   r   
isinstancecauser   status_parse_jsonresponsereadgetIE_NAME_token)r5   r:   r;   	auth_data	auth_infoeerror_messager   r   r   _perform_loginA   s,   

zHRTiBaseIE._perform_loginc                 C   s   | j s| jdd d S d S )Nr;   )method)rH   raise_login_requiredr5   r   r   r   _real_initializeY   s   zHRTiBaseIE._real_initialize)__name__
__module____qualname____doc___NETRC_MACHINEr1   r-   r'   r)   rH   r9   rM   rQ   r   r   r   r   r      s    $r   c                   @   sV   e Zd ZdZdddddddeeeed	d
dddddddddddgZdd ZdS )HRTiIEa  (?x)
                        (?:
                            hrti:(?P<short_id>[0-9]+)|
                            https?://
                                hrti\.hrt\.hr/(?:\#/)?video/show/(?P<id>[0-9]+)/(?P<display_id>[^/]+)?
                        )
                    zLhttps://hrti.hrt.hr/#/video/show/2181385/republika-dokumentarna-serija-16-hd2181385z#republika-dokumentarna-serija-16-hdmp4z)REPUBLIKA, dokumentarna serija (1/6) (HD)z$md5:48af85f620e8e0e1df4096270568544fij     )id
display_idexttitledescriptionduration
view_countaverage_ratingepisode_numberseason_number	age_limitRequires account credentials)url	info_dictskipz)https://hrti.hrt.hr/#/video/show/2181385/Trg   only_matchingzhrti:2181385zEhttps://hrti.hrt.hr/video/show/3873068/cuvar-dvorca-dramska-serija-14c              
   C   s   |  |}|dp|d}|dp|}| | j d| d|dd d }|d	 }|d
 }|d d d }|d j| jd}	| j|	|dddd}
t|d}t	|di d}t
|d}t
|d}t
|d}|||||||||
d	S )Nshort_idr[   r\   z
/video_id/r%   Downloading video metadata JSONvideor   r^   
title_longvideo_assetsmovierg   )TOKENrY   m3u8_nativehls)entry_protocolm3u8_idsummary_longparental_controlratingviewsuser_ratingr`   )	r[   r\   r^   r_   r`   ra   rb   re   formats)_match_valid_urlgroupr(   r2   r0   rH   _extract_m3u8_formatsr   rF   r
   r	   )r5   rg   mobjvideo_idr\   rn   
title_infor^   rq   m3u8_urlr|   r_   re   ra   rb   r`   r   r   r   _real_extract   sD   
zHRTiIE._real_extractN)rR   rS   rT   
_VALID_URLint_TESTSr   r   r   r   r   rW   _   s8    rW   c                   @   s>   e Zd ZdZdddddddd	d
ddd
dgZdd ZdS )HRTiPlaylistIEzWhttps?://hrti\.hrt\.hr/(?:#/)?video/list/category/(?P<id>[0-9]+)/(?P<display_id>[^/]+)?z5https://hrti.hrt.hr/#/video/list/category/212/ekumena212ekumena)r[   r^      rf   )rg   rh   playlist_mincountri   z.https://hrti.hrt.hr/#/video/list/category/212/Trj   z3https://hrti.hrt.hr/video/list/category/212/ekumenac                    s     |}|d}|dp|}  j d| d|d}t|dd tp1dd	 |d
g D } fdd	|D } |||S )Nr[   r\   z/category_id/r%   rm   c                 S   s   | d d d d d S )Nvideo_listingsr   alternativeslistr   )xr   r   r   r      s    z.HRTiPlaylistIE._real_extract.<locals>.<lambda>c                 S   s   g | ]}| d r|d  qS )r[   )rF   ).0rn   r   r   r   
<listcomp>   s    z0HRTiPlaylistIE._real_extract.<locals>.<listcomp>videosc                    s   g | ]
}  d | qS )zhrti:)
url_result)r   r   rP   r   r   r      s    )r}   r~   r(   r2   r   r   rF   playlist_result)r5   rg   r   category_idr\   rD   	video_idsentriesr   rP   r   r      s   

zHRTiPlaylistIE._real_extractN)rR   rS   rT   r   r   r   r   r   r   r   r      s"    	r   )r*   commonr   
networkingr   networking.exceptionsr   utilsr   r   r	   r
   r   r   rW   r   r   r   r   r   <module>   s    	PH