U
    g@$                     @   s`   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 dd Z	dd Z
dd	 Zd
d ZdS )    N)parse_qsurlparse)
USER_AGENTc                 C   sL   ddddddddd	d
ddddddddddg}|D ]}t || r0 dS q0dS )z
    Memeriksa apakah URL adalah URL Terabox yang valid.
    
    Args:
        url (str): URL yang akan diperiksa
        
    Returns:
        bool: True jika URL adalah URL Terabox yang valid, False jika tidak
    zww\.mirrobox\.comzwww\.nephobox\.comzfreeterabox\.comzwww\.freeterabox\.comz1024tera\.comz4funbox\.cozwww\.4funbox\.comzmirrobox\.comznephobox\.comzterabox\.appzterabox\.comzwww\.terabox\.apzwww\.terabox\.comzwww\.1024tera\.cozwww\.momerybox\.comzteraboxapp\.comzmomerybox\.comztibibox\.comzwww\.tibibox\.comzwww\.teraboxapp\.comTF)research)urlpatternspattern r
   !/var/www/html/telegram/terabox.pycheck_url_patterns   s2    r   c                 C   sV   | dk r|  dS | dk r*| d ddS | dk rB| d ddS | d ddS d	S )
z
    Mengubah ukuran dalam bytes menjadi format yang mudah dibaca.
    
    Args:
        size_in_bytes (int): Ukuran dalam bytes
        
    Returns:
        str: Ukuran dalam format yang mudah dibaca (KB, MB, GB)
    i   z Bi   z.2fz KBi   @z MBz GBNr
   )Zsize_in_bytesr
   r
   r   get_formatted_size1   s    

r   c                 C   s.   d}t || }|D ]}t|r|  S qdS )z
    Mengekstrak URL Terabox dari teks.
    
    Args:
        text (str): Teks yang berisi URL Terabox
        
    Returns:
        str or None: URL Terabox jika ditemukan, None jika tidak
    z(https?://\S+)N)r   findallr   )textr	   Zurlsr   r
   r
   r   extract_terabox_urlD   s    

r   c              
   C   s  zXt d|   tddddd}d}tj||d| id	d
}t d|j  |jdkr^z| }t dtj|dd  |dg }|r$|d di }|r$|dd}|dd}|s|r$d}	d}
d}|rjzZtj|dd}|j	dd}|j	d}|r"t
d|}|r"|d }	|r0t|}
W n6 tk
rh } zt dt|  W 5 d}~X Y nX |rztj|ddd}|j}W n: tk
r } zt dt|  |}W 5 d}~X Y nX |	st| j}|r|d d! }	|	sd"}	|	|p||p|d|
rt|
nd#|
d$W W S W n6 tk
r\ } zt d%t|  W 5 d}~X Y nX zt| j}| |d&} td'd(d)}tj| |dd*}t d+|j  |jdkr
t
d,|j}|r|d-nd"}	t
d.|j}|r|d-nd}|	| | |d#ddd/W W S W n6 tk
rB } zt d0t|  W 5 d}~X Y nX d"| | dd#ddd1d2W S  tk
r } zt d3t|  W Y dS d}~X Y nX dS )4z
    Mendapatkan link download langsung dari URL Terabox.
    
    Args:
        url (str): URL Terabox
        
    Returns:
        dict: Informasi file termasuk link download, nama file, ukuran, dll.
              Atau None jika gagal
    zProcessing URL: z!application/json, text/plain, */*zapplication/jsonzhttps://ytshorts.savetube.mezhttps://ytshorts.savetube.me/)
User-AgentAcceptzContent-TypeZOriginZRefererz6https://ytshorts.savetube.me/api/v1/terabox-downloaderr      )headersjsontimeoutzAPI Response Status:    zAPI Response Data:    )indentresponser   resolutionszFast Download zHD VideoN
   )r   zContent-Lengthzcontent-dispositionzfilename="(.+)"zError getting video link info: T)r   allow_redirectszError getting direct link: /terabox_fileUnknown)	file_namelinkdirect_linkthumbsize
size_byteszError parsing API response: z1024terabox.comzUtext/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8zen-US,en;q=0.5)r   r   zAccept-Language)r   r   zScraping Response Status: z<title>(.*?) - Terabox</title>   zog:image" content="([^"]+)")r#   r$   r%   r&   r'   r(   requires_premiumzError scraping page: zoTidak dapat mengekstrak link download langsung. File ini mungkin memerlukan akses premium atau URL tidak valid.)r#   r$   r%   r&   r'   r(   r*   messagez%Error getting Terabox download link: )printr   requestspoststatus_coder   dumpsgetheadr   r   r   int	Exceptionstrr   r   pathsplitr   netlocreplacer   r   group)r   r   Zapi_urlr   data	responsesr   Zdownload_linkZ
video_linkr#   	file_sizer%   content_lengthcontent_dispositionZfile_name_matcher6   r8   Zthumbnail_match	thumbnailr
   r
   r   get_terabox_download_linkW   s    
$

$
	$rB   )r   r-   r   timeurllib.parser   r   configr   r   r   r   rB   r
   r
   r
   r   <module>   s   &