U
    g-                     @   s6   d dl Z d dlZd dlZd dlmZ G dd dZdS )    N)YouTubec                   @   s<   e Zd ZdddZdd ZdddZdd	d
ZdddZdS )VideoDownloader	downloadsc                 C   s   || _ tj|dd d S )NT)exist_ok)download_pathosmakedirs)selfr    r
   !/var/www/html/dlvid/downloader.py__init__   s    zVideoDownloader.__init__c                 C   sP   d|ksd|krdS d|ks,d|ks,d|kr0dS d|kr<d	S d
|krHdS dS dS )z#Determine the platform from the URLzyoutube.comzyoutu.beyoutubezfacebook.comzfb.comzfb.watchZfacebookzinstagram.comZ	instagramz
tiktok.comZtiktokZgenericNr
   )r	   urlr
   r
   r   get_platform   s    zVideoDownloader.get_platformFc           
   
   C   s   zt |}|rd|jjdd }|j| jd}tj|\}}|d }t	|| d||j
ddW S |j }|j| jd}d||j
ddW S W n4 tk
r }	 zdt|	d	 W Y S d
}	~	X Y nX d
S )z(Download video from YouTube using pytubeT)Z
only_audio)Zoutput_pathz.mp3mp3success	file_pathtitleformatmp4Fr   errorN)r   streamsfilterfirstdownloadr   r   pathsplitextrenamer   Zget_highest_resolution	Exceptionstr)
r	   r   
audio_onlyZytstreamout_filebase_Zmp3_fileer
   r
   r   download_youtube   s    
z VideoDownloader.download_youtubec              
   C   s2  z|  |}| dtd  }tj| j|}|d ddd}|rh|dddd	d
gd d}n|ddi d}t	|j}|j
|dd}	d|	kr|	d d }	|s|	dd}|	dd}
| d| }d||
|dW  5 Q R  W S Q R X W n6 tk
r, } zdt|d W Y S d}~X Y nX dS )z-Download video using yt-dlp for all platformsr&      z.%(ext)sT)ZouttmplquietZno_warningszbestaudio/bestZFFmpegExtractAudior   Z192)keyZpreferredcodecZpreferredquality)r   Zpostprocessorsr   Zbestr   )r   entriesr   extr   Video.r   Fr   N)r   r   urandomhexr   joinr   updateyt_dlpZ	YoutubeDLZextract_infogetr    r!   )r	   r   r"   platformfilenameZoutput_templateZydl_optsZ	final_extZydlinfor   r   r'   r
   r
   r   download_with_ytdlp.   sJ    
 z#VideoDownloader.download_with_ytdlpc                 C   s2   |  |}|dkr"|s"| ||S | ||S dS )z:Main download method that routes to appropriate downloaderr   N)r   r(   r9   )r	   r   r"   r6   r
   r
   r   r   `   s    
zVideoDownloader.downloadN)r   )F)F)F)__name__
__module____qualname__r   r   r(   r9   r   r
   r
   r
   r   r      s
   


2r   )r   rer4   Zpytuber   r   r
   r
   r
   r   <module>   s   