Cara Membuat Youtube Downloader Menggunakan Youtube-Dl Dan Script PHP

Cara Membuat Youtube Downloader Menggunakan Youtube-Dl Dan Script PHP

DailyBlog.id - Siapa disini yang suka menonton Youtube? tentu banyak pastinya. Nah, kalau cuma nonton saja rasanya agak kurang gimana gitu, pasti kalian juga ingin mengunduh videonya ya kan? lalu kalian mencari situs Youtube Downloader agar bisa mengunduh video tersebut, dan terganggu oleh iklan yang banyak pada situsnya, hehehe. Maka dari situ, saya akan membagikan tutorial pada kalian semua untuk membuat Youtube Downloader sendiri hanya dengan youtube-dl dan script php. Selain itu kalian juga dapat mengunduh video youtube melalui terminal pada linux kalian, ataupun kalian juga bisa membuat situs Youtube Downloader sendiri dan menghasilkan $ pada situs tersebut dengan membuat API Youtube Downloader menggunakan Script PHP. Nah, gimana? ingin tau cara membuatnya kan. Sebelum membuat, kalian harus mengetahui terlebih dahulu apa itu youtube-dl.Jika kalian suka bermain dengan API (Application Programming Interface) pasti pernah mengenal atau mendengar youtube-dl (meskipun tidak semuanya). Dan yang belum tau youtube-dl, saya akan memperkenalkan pada kalian semua apa itu youtube-dl, dan jawabannya ini dia:


Apa Itu youtube-dl?

youtube-dl merupakan sebuah manajer unduhan yang open-source. Digunakan untuk mengunduh video dan audio dari Youtube.com dan sudah digunakan oleh lebih dari 1000 situs web hos video lainnya.

Nah itu dia youtube-dl, sudah paham kan? jika kalian sudah paham, maka saatnya kita akan membuat Youtube Downloader. Pastikan kalian sudah mempunyai software seperti putty, atau apapun itu yang bisa meremote server kalian. atau bisa langsung menggunakan terminal pada linux kalian. Jika sudah siap, oke saatnya kita membuat.

1. Dikarenakan kita akan menggunakan youtube-dl, maka langkah pertama yang harus dilakukan. kalian harus menginstall youtube-dl di linux kalian. Bisa dilakukan dengan cara:

sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl


Jika kalian tidak menggunakan curl, maka kalian bisa menggunakan wget. dengan cara:

sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl


2. Tahap kedua, lakukan uji coba dengan cara mengetikan youtube-dl --version diterminal linux kalian. Jika seperti ini, maka youtube-dl nya sudah siap digunakan.


Cara Membuat Youtube Downloader Menggunakan Youtube-Dl Dan Script PHP (Gambar 1)


3. Jika kalian ingin membuat API Youtube Downloadernya, kalian bisa masukan format seperti ini youtube-dl "{url_video}" -j, nah nanti keluar banyak tuh data json dari video youtubenya. -j itu fungsinya buat dump json dari video youtubenya. nanti tampilannya seperti ini:


Cara Membuat Youtube Downloader Menggunakan Youtube-Dl Dan Script PHP (Gambar 2)


Dari situ kalian bisa membuat API Youtube Downloadernya, nah kebetulan sudah saya buat kan untuk mempermudah kalian dalam penggunaan API nya. kalian bisa mengcopy paste script php dibawah ini:

<?php

error_reporting(0);

class YoutubeDownloader
{

    protected $url_youtube;

    public function __construct($url_youtube)
    {
        $this->url_youtube  = $url_youtube;
        header('Content-Type: application/json');
    }

    /** Execute shell youtube-dl */
    private function exec($command)
    {
        return shell_exec('youtube-dl "'.$this->url_youtube.'" '.$command);
    }


    /** Get Dump JSON */
    private function getJSONOutput()
    {
        return json_decode($this->exec('-j'));
    }


    /** Convert Duration from seconds */
    private function convertDuration($total_time)
    {
        $seconds    = $total_time % 60;
        $minutes    = (floor($total_time / 60)) % 60;
        $hours      = floor($total_time / 3600);
        $sec        = sprintf('%02d', $seconds);
        return ($hours == 0 ? $minutes . ':'.$sec : $hours . ':' . $minutes . ':'.$sec);
    }


    /** Validate Yotube URL */
    private function validateURL($url)
    {
        return preg_match('~^(?:https?://)?(?:www[.])?(?:youtube[.]com/watch[?]v=|youtu[.]be/)([^&]{11})~x', $url);
    }


    /** Time Execute */
    private function timeExecute() 
    {
        $time = microtime();
        $time = explode(' ', $time);
        $time = $time[1] + $time[0];
        return $time;
     
    }


    /** Make message error */
    private function errMsg($message)
    {
        return json_encode(
            array(
                'error'     => true,
                'message'   => $message
            )
        );
    }


    /** Itag Youtube Info */
    private function getItagInfo()
    {
        return array(
            /** audio */
            139 => array('audio' => true, 'video' => false),
            140 => array('audio' => true, 'video' => false),
            141 => array('audio' => true, 'video' => false),
            171 => array('audio' => true, 'video' => false),
            249 => array('audio' => true, 'video' => false),
            250 => array('audio' => true, 'video' => false),
            251 => array('audio' => true, 'video' => false),

            /** audio/video */
            5   => array('audio' => true, 'video' => true),
            6   => array('audio' => true, 'video' => true),
            17  => array('audio' => true, 'video' => true),
            18  => array('audio' => true, 'video' => true),
            22  => array('audio' => true, 'video' => true),
            34  => array('audio' => true, 'video' => true),
            35  => array('audio' => true, 'video' => true),
            36  => array('audio' => true, 'video' => true),
            37  => array('audio' => true, 'video' => true),
            38  => array('audio' => true, 'video' => true),
            43  => array('audio' => true, 'video' => true),
            44  => array('audio' => true, 'video' => true),
            45  => array('audio' => true, 'video' => true),
            46  => array('audio' => true, 'video' => true),
            82  => array('audio' => true, 'video' => true),
            83  => array('audio' => true, 'video' => true),
            84  => array('audio' => true, 'video' => true),
            85  => array('audio' => true, 'video' => true),
            92  => array('audio' => true, 'video' => true),
            93  => array('audio' => true, 'video' => true),
            94  => array('audio' => true, 'video' => true),
            95  => array('audio' => true, 'video' => true),
            96  => array('audio' => true, 'video' => true),
            101 => array('audio' => true, 'video' => true),
            102 => array('audio' => true, 'video' => true),
            132 => array('audio' => true, 'video' => true),
            151 => array('audio' => true, 'video' => true),
            
            /** video */
            133 => array('audio' => false, 'video' => true),
            134 => array('audio' => false, 'video' => true),
            135 => array('audio' => false, 'video' => true),
            136 => array('audio' => false, 'video' => true),
            137 => array('audio' => false, 'video' => true),
            138 => array('audio' => false, 'video' => true),
            160 => array('audio' => false, 'video' => true),
            167 => array('audio' => false, 'video' => true),
            168 => array('audio' => false, 'video' => true),
            169 => array('audio' => false, 'video' => true),
            218 => array('audio' => false, 'video' => true),
            219 => array('audio' => false, 'video' => true),
            242 => array('audio' => false, 'video' => true),
            243 => array('audio' => false, 'video' => true),
            244 => array('audio' => false, 'video' => true),
            245 => array('audio' => false, 'video' => true),
            246 => array('audio' => false, 'video' => true),
            247 => array('audio' => false, 'video' => true),
            248 => array('audio' => false, 'video' => true),
            264 => array('audio' => false, 'video' => true),
            266 => array('audio' => false, 'video' => true),
            271 => array('audio' => false, 'video' => true),
            272 => array('audio' => false, 'video' => true),
            278 => array('audio' => false, 'video' => true),
            298 => array('audio' => false, 'video' => true),
            299 => array('audio' => false, 'video' => true),
            302 => array('audio' => false, 'video' => true),
            303 => array('audio' => false, 'video' => true),
            308 => array('audio' => false, 'video' => true),
            313 => array('audio' => false, 'video' => true),
            315 => array('audio' => false, 'video' => true),
            330 => array('audio' => false, 'video' => true),
            331 => array('audio' => false, 'video' => true),
            332 => array('audio' => false, 'video' => true),
            333 => array('audio' => false, 'video' => true),
            334 => array('audio' => false, 'video' => true),
            335 => array('audio' => false, 'video' => true),
            336 => array('audio' => false, 'video' => true),
            337 => array('audio' => false, 'video' => true),
            394 => array('audio' => false, 'video' => true),
            395 => array('audio' => false, 'video' => true),
            396 => array('audio' => false, 'video' => true),
            397 => array('audio' => false, 'video' => true),
            398 => array('audio' => false, 'video' => true),
            399 => array('audio' => false, 'video' => true),
            400 => array('audio' => false, 'video' => true),
            401 => array('audio' => false, 'video' => true),
            402 => array('audio' => false, 'video' => true)
        );
    }


    public function check_youtubedl() 
    {
        $return = shell_exec(sprintf("which %s", escapeshellarg('youtube-dl')));
        return !empty($return);
    }


    /** Execute youtube-dl */
    public function execute()
    {
        if ($this->check_youtubedl())
        {
            if (!$this->validateURL($this->url_youtube))
                $output = $this->errMsg('Silahkan gunakan alamat URL Video Youtube dengan benar.');
            else
            {
                $start_time = $this->timeExecute();
                $json       = $this->getJSONOutput();
                $videos     = $json->formats;

                if (count($videos) > 0 && is_array($videos))
                {
                    /** List array from formats */ 
                    $arr = array();
                    foreach($videos as $dat)
                    {
                        $tagInfo = $this->getItagInfo();
                        $tagInfo = $tagInfo[$dat->format_id];

                        $arr[] = array(
                            'itag_id'   => $dat->format_id,
                            'url'       => $dat->url,
                            'filesize'  => $dat->filesize,
                            'ext'       => '.'.$dat->ext,
                            'audio'     => $tagInfo
                        );
                    }

                    $end_time   = $this->timeExecute();
                    $time_taken = round($end_time - $start_time, 2);

                    $output = json_encode(
                        array(
                            'output_response'   => array(
                                'title'         => $json->title,
                                'duration'      => $this->convertDuration($json->duration),
                                'view'          => number_format($json->view_count),
                                'like'          => number_format($json->like_count),
                                'dislike'       => number_format($json->dislike_count),
                                'thumbnail'     => $json->thumbnail,
                                'format'        => $json->format_note,
                                'videos'        => $arr
                            ),
                            'server_response'   => array(
                                'time_execute'  => $time_taken.'s',
                                'referer'       => $_SERVER['HTTP_REFERER']
                            ),
                            'error'             => false
                        )
                    );
                }
                else $output = $this->errMsg('Tidak dapat menemukan data video, silahkan coba kembali.');
            }
        }
        else $output = $this->errMsg('Tidak dapat menemukan youtube-dl. Silahkan install terlebih dahulu.');

        return $output;
    }
}

$ytb = new YoutubeDownloader('{alamat_video_youtube}');
echo $ytb->execute();

?>


Jika sudah, silahkan dicoba. Dan kalian bisa mengembangkan sendiri nantinya dengan script php yang sudah saya berikan diatas ini. Kalian juga bisa membaca dokumentasi lengkap yang berada di situs github youtube-dl. banyak sekali yang bisa kalian pelajari dari youtube-dl disana. Mungkin sampai disini saja tutorial saya mengenai cara membuat Youtube Downloader menggunakan youtube-dl dan script php. Semoga artikel tutorial yang saya berikan ini dapat bermanfaat bagi kalian semua yang membaca dan mencobanya. Dan seperti biasanya, saya ucapkan sekian dan terima kasih.

Selamat mencoba!

Previous Post Next Post