Skip to content
Youths Forum Youths Forum Youths Forum

Tech Blogs & Programming Tutorials

Youths Forum Youths Forum Youths Forum

Tech Blogs & Programming Tutorials

  • Blog
  • News
  • Programming
    • PHP
    • JavaScript
    • JQuery
    • CSS
    • HTML
    • API
  • Stock Market Live
  • Automobiles
    • Cars
  • Gadgets
    • Phones
    • Android Phones

Categories

  • Automobiles (12)
    • Cars (7)
  • Blog (103)
    • Poems (2)
    • Space (2)
  • Command (2)
  • Education (2)
  • Entertainment (4)
  • Gadgets (9)
    • Phones (8)
      • Android Phones (4)
  • HTML Templates (11)
  • IT Training Institutes (1)
  • Lifestyle (4)
  • News (51)
  • Others (23)
  • Programming (296)
    • API (16)
    • CSS (83)
    • Database (4)
    • Hosting (1)
    • HTML (37)
    • JavaScript (117)
      • JQuery (27)
      • ReactJS (7)
    • PHP (116)
  • Python (3)
  • recipes (1)
  • SEE Result (1)
  • Server (3)
  • Blog
  • News
  • Programming
    • PHP
    • JavaScript
    • JQuery
    • CSS
    • HTML
    • API
  • Stock Market Live
  • Automobiles
    • Cars
  • Gadgets
    • Phones
    • Android Phones
Close

Search

PHP

How to download Youtube Video using PHP ?

By Admin
March 3, 2020 3 Min Read
0

In this post, we will be writing a PHP script to download a YouTube video using PHP.

We have a Youtube Downloader Class provided by CodexWorld. We will be using the same class to download YouTube video.

There are two php files for this. index.php and youtube.php

The demo can be found here : DEMO : YouTube Video Downloader Using PHP

The source codes are provided below.

Youtube Downloader Class

youtube.php

<?php 
/** 
 * CodexWorld 
 * 
 * This Downloader class helps to download youtube video. 
 * 
 * @class       YouTubeDownloader 
 * @author      CodexWorld 
 * @link        http://www.codexworld.com 
 * @license     http://www.codexworld.com/license 
 */ 
class YouTubeDownloader { 
    /* 
     * Video Id for the given url 
     */ 
    private $video_id; 
      
    /* 
     * Video title for the given video 
     */ 
    private $video_title; 
      
    /* 
     * Full URL of the video 
     */ 
    private $video_url; 
     
    /* 
     * store the url pattern and corresponding downloader object 
     * @var array 
     */ 
    private $link_pattern; 
     
    public function __construct(){ 
        $this->link_pattern = "/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed)\/))([^\?&\"'>]+)/"; 
    } 
     
    /* 
     * Set the url 
     * @param string 
     */ 
    public function setUrl($url){ 
        $this->video_url = $url; 
    } 
     
    /* 
     * Get the video information 
     * return string 
     */ 
    private function getVideoInfo(){ 
        return file_get_contents("https://www.youtube.com/get_video_info?video_id=".$this->extractVideoId($this->video_url)."&cpn=CouQulsSRICzWn5E&eurl&el=adunit"); 
    } 
      
    /* 
     * Get video Id 
     * @param string 
     * return string 
     */ 
    private function extractVideoId($video_url){ 
        //parse the url 
        $parsed_url = parse_url($video_url); 
        if($parsed_url["path"] == "youtube.com/watch"){ 
            $this->video_url = "https://www.".$video_url; 
        }elseif($parsed_url["path"] == "www.youtube.com/watch"){ 
            $this->video_url = "https://".$video_url; 
        } 
         
        if(isset($parsed_url["query"])){ 
            $query_string = $parsed_url["query"]; 
            //parse the string separated by '&' to array 
            parse_str($query_string, $query_arr); 
            if(isset($query_arr["v"])){ 
                return $query_arr["v"]; 
            } 
        }    
    } 
     
    /* 
     * Get the downloader object if pattern matches else return false 
     * @param string 
     * return object or bool 
     *  
     */ 
    public function getDownloader($url){ 
        /* 
         * check the pattern match with the given video url 
         */ 
        if(preg_match($this->link_pattern, $url)){ 
            return $this; 
        } 
        return false; 
    } 
      
    /* 
     * Get the video download link 
     * return array 
     */ 
    public function getVideoDownloadLink(){ 
        //parse the string separated by '&' to array 
        parse_str($this->getVideoInfo(), $data); 
        $videoData = json_decode($data['player_response'], true); 
        $videoDetails = $videoData['videoDetails']; 
        $streamingData = $videoData['streamingData']; 
        $streamingDataFormats = $streamingData['formats']; 
          
        //set video title 
        $this->video_title = $videoDetails["title"]; 
          
        //Get the youtube root link that contains video information 
        $final_stream_map_arr = array(); 
          
        //Create array containing the detail of video  
        foreach($streamingDataFormats as $stream){ 
            $stream_data = $stream; 
            $stream_data["title"] = $this->video_title; 
            $stream_data["mime"] = $stream_data["mimeType"]; 
            $mime_type = explode(";", $stream_data["mime"]); 
            $stream_data["mime"] = $mime_type[0]; 
            $start = stripos($mime_type[0], "/"); 
            $format = ltrim(substr($mime_type[0], $start), "/"); 
            $stream_data["format"] = $format; 
            unset($stream_data["mimeType"]); 
            $final_stream_map_arr [] = $stream_data;          
        } 
        return $final_stream_map_arr; 
    } 
      
    /* 
     * Validate the given video url 
     * return bool 
     */ 
    public function hasVideo(){ 
        $valid = true; 
        parse_str($this->getVideoInfo(), $data); 
        if($data["status"] == "fail"){ 
            $valid = false; 
        }  
        return $valid; 
    } 
      
}

 

index.php

<?php
if(isset($_POST['url']) && $_POST['url']!=''){
    
    // Load and initialize downloader class 
    include_once 'youtube.php'; 
    $handler = new YouTubeDownloader(); 
     
    // Youtube video url 
    $youtubeURL = 'https://www.youtube.com/watch?v=f7wcKoEbUSA'; 
    $youtubeURL = $_POST['url'];
     
    // Check whether the url is valid 
    if(!empty($youtubeURL) && !filter_var($youtubeURL, FILTER_VALIDATE_URL) === false){ 
        // Get the downloader object 
        $downloader = $handler->getDownloader($youtubeURL); 
         
        // Set the url 
        $downloader->setUrl($youtubeURL); 
         
        // Validate the youtube video url 
        if($downloader->hasVideo()){ 
            // Get the video download link info 
            $videoDownloadLink = $downloader->getVideoDownloadLink(); 
             
            $videoTitle = $videoDownloadLink[0]['title']; 
            $videoQuality = $videoDownloadLink[0]['qualityLabel']; 
            $videoFormat = $videoDownloadLink[0]['format']; 
            $videoFileName = strtolower(str_replace(' ', '_', $videoTitle)).'.'.$videoFormat; 
            $downloadURL = $videoDownloadLink[0]['url']; 
            $fileName = preg_replace('/[^A-Za-z0-9.\_\-]/', '', basename($videoFileName)); 
             
            if(!empty($downloadURL)){ 
                // Define header for force download 
                header("Cache-Control: public"); 
                header("Content-Description: File Transfer"); 
                header("Content-Disposition: attachment; filename=$fileName"); 
                header("Content-Type: application/zip"); 
                header("Content-Transfer-Encoding: binary"); 
                 
                // Read the file 
                readfile($downloadURL); 
            } 
        }else{ 
            echo "The video is not found, please check YouTube URL."; 
        } 
    }else{ 
        echo "Please provide valid YouTube URL."; 
    } 

}

else{ ?>
    <form action="" method="post">
        <label></label>
        <input type="text" style="width:400px;" name="url" placeholder="Youtube Video URL" required>
        <input type="submit" value="Download Video">
    </form>
<?php } ?>

 

 

 

Tags:

PHPyoutube
Author

Admin

Follow Me
Other Articles
Previous

PHP Script to Create Your Own Captcha

Next

How to download YouTube Thumbnail using PHP ?

No Comment! Be the first one.

Leave a Reply

Your email address will not be published. Required fields are marked *

FIFA World Cup 2026 Predict and Win by SportsGuff

Recent Posts

  • Unpacking Nepal’s Record Rs 2.12 Trillion Budget and What It Means for You
  • How to Write a Strong Scholarship Application: The Ultimate Step-by-Step Guide
  • How to Prepare for Exams Without Stress: The Ultimate Science-Backed Guide
  • Chiranjibi Adhikari Appointed Acting President of CAN Federation
  • How to Design a Student Marksheet Using HTML and CSS

Tags

adsense ai animate animation animation using HTML and CSS API blog calculator chatgpt Cryptocurrency CSS css animation design Email Facebook featured filemanager file manager free template google htaccess HTML image Instagram interview javascript JQuery jquery ui NADA AutoShow NADA Auto Show 2024 password PHP Progressive Web App PWA QR random react reactjs Rotate travel Twitter vpn youthforum youthsforum youtube

About Us

At Youths Forum, we are passionate about sharing knowledge that empowers students, educators, professionals, and technology enthusiasts.

Our Mission

Our mission is simple: to make technology and education accessible, understandable, and beneficial for everyone. We strive to create content that helps our readers learn new skills and stay updated with industry developments.

RSS RSS

  • Unpacking Nepal’s Record Rs 2.12 Trillion Budget and What It Means for You Admin
  • How to Write a Strong Scholarship Application: The Ultimate Step-by-Step Guide Admin
  • How to Prepare for Exams Without Stress: The Ultimate Science-Backed Guide Admin

Quick Links

  • Stock Market Live
  • Parliament Election 2082
Copyright 2026 — Youths Forum. All rights reserved. Blogsy WordPress Theme