U
    L7g/                     @   sr   d dl Z 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	 e
e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)
       z Bi   z.2fz KBi   @z MBz GBNr
   )Zsize_in_bytesr
   r
   r   get_formatted_size5   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_urlH   s    

r   c              
   C   s  zbt d|   tddd}d}tj||d| idd}t d	|j  |jd
kr̐z8| }t dtj|dd  |ddkr|di }|dd}|d}|d}d}	|rnt	
d|}
|
rnt|
d}|
d}|dkrt|d }	nh|dkr"t|d d }	nL|dkrBt|d d d }	n,|dkrft|d d d d }	nt|}	||||d|pd|	dW W S W n8 tk
r } zt d t|  W 5 d}~X Y nX z\d!}td"dd#d$d%}d| i}tj|||dd&}t d'|j  |jd
kr(z| }t d(tj|dd  |ddkr|di d)}|rtd d*| }tj||dd+}|jd
kr| }t d,tj|dd  |ddkr|di }|d-d}|d.d}|d/}d}	t|ttfrt|}	nt|trt	
d|}
|
rt|
d}|
d}|dkrft|d }	nh|dkrt|d d }	nL|dkrt|d d d }	n,|dkrt|d d d d }	nt|}	||||d||	dW W W S W n8 tk
r& } zt d0t|  W 5 d}~X Y nX W n8 tk
rb } zt d1t|  W 5 d}~X Y nX zt| j}| |d2} td3d4d5}tj| |d6d+}t d7|j  |jd
krt	
d8|j}|r|dnd}t	
d9|j}|r|dnd}|| | |ddd:d;W W S W n8 tk
rL } zt d<t|  W 5 d}~X Y nX d| | dddd:d=d>W S  tk
r } zt d?t|  W Y dS d}~X Y nX dS )@z
    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/json)
User-AgentAcceptContent-Typez5https://terabox-dl-api.vercel.app/api/getDownloadLinkr      )headersjsontimeoutzAPI Response Status:    zAPI Response Data:    )indentstatussuccessdatafilenameterabox_filesizeZdownloadLinkNz([\d.]+)\s*([KMGT]?B)   ZKBr   ZMBGBZTB	thumbnailUnknown)	file_namelinkdirect_linkthumbr!   
size_byteszError parsing API response: z-https://teraboxdownloader.com/api/task/createz!application/x-www-form-urlencodedzhttps://teraboxdownloader.comzhttps://teraboxdownloader.com/)r   r   r   OriginZReferer)r   r   r   z!Alternative API Response Status: zAlternative API Response: task_idz'https://teraboxdownloader.com/api/task/)r   r   zTask Result: r&   	file_sizeZdirect_download_linkz+Error processing alternative API response: zError with alternative API: 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
   zScraping Response Status: z<title>(.*?) - Terabox</title>zog:image" content="([^"]+)"T)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: )loggerinfor   requestspoststatus_coder   dumpsgetr   r   floatgroupint	Exceptionerrorstrtimesleep
isinstancer   netlocreplacer   )r   r   Zapi_urlresponser   	file_infor&   r-   r(   r*   Z
size_matchZsize_numZ	size_uniteresultr,   Z
result_urlZresult_responseZresult_dataZ	file_datarA   Zfile_name_matchZthumbnail_matchr$   r
   r
   r   get_terabox_download_link[   s   






&	 








*&
	&rG   )r   r3   r   r>   loggingurllib.parser   r   configr   	getLogger__name__r1   r   r   r   rG   r
   r
   r
   r   <module>   s   
&