Download YouTube Video using PHP

YouTube is the most popular video-sharing platform that allows the user to upload, view, and share videos online. The videos are watched online and YouTube did not provide any download option for offline uses. If you want to access the raw file of YouTube video, the video needs to be downloaded. In this tutorial, we will show you how to download videos from YouTube using PHP.
The YouTube video downloader script helps to download the YouTube video for offline uses. If your web application needs to access the raw video file from YouTube, downloader script is the easiest way to download YouTube video in PHP.

YouTube Video Downloader Class (YouTubeDownloader.class.php)

The YouTubeDownloader class helps to retrieve video info and file URL from YouTube using PHP. This class used the following helper methods to get the YouTube video download link.
  • setUrl() – Set the video file URL.
  • getVideoInfo() – Get the video information.
  • extractVideoId() – Get video Id from YouTube video URL.
  • getDownloader() – Get the downloader object if pattern matches otherwise return false.
  • getVideoDownloadLink() – Get the video download URL with video info (itag, quality, title, mime, and format).
  • getStreamArray() – Get the youtube root data that contains the video information.
  • hasVideo() – Validate the YouTube video URL.
<?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);
         
        //set video title
        $this->video_title $data["title"];
         
        //Get the youtube root link that contains video information
        $stream_map_arr $this->getStreamArray();
        $final_stream_map_arr = array();
         
        //Create array containing the detail of video 
        foreach($stream_map_arr as $stream){
            parse_str($stream$stream_data);
            $stream_data["title"] = $this->video_title;
            $stream_data["mime"] = $stream_data["type"];
            $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["type"]);
            $final_stream_map_arr [] = $stream_data;         
        }
        return $final_stream_map_arr;
    }
     
    /*
     * Get the youtube root data that contains the video information
     * return array
     */
    private function getStreamArray(){
        parse_str($this->getVideoInfo(), $data);
        $stream_link $data["url_encoded_fmt_stream_map"];
        return explode(","$stream_link); 
    }
     
    /*
     * 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;
    }
     
}

Download YouTube Video using PHP

Use the helper functions of YouTubeDownloader class to get the download link of YouTube video. The following process is followed to download the YouTube video file using PHP.
  • Load and initialize downloader class.
  • Get the downloader object.
  • Set the YouTube URL.
  • Validate the YouTube video URL.
  • Get the video download link and video info.
  • Force download video file from YouTube.
<?php// Load and initialize downloader classinclude_once 'YouTubeDownloader.class.php';$handler = new YouTubeDownloader();
// Youtube video url$youtubeURL 'https://www.youtube.com/watch?v=f7wcKoEbUSA';
// Check whether the url is validif(!empty($youtubeURL) && !filter_var($youtubeURLFILTER_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]['quality'];
        $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 headers
            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.";
}?>

Conclusion

The example code provides a simple way to download YouTube video using PHP. You can download any video from YouTube by providing the video URL. Also, you can use YouTubeDownloader class to build YouTube video downloader with PHP.
Download YouTube Video using PHP Download YouTube Video using PHP Reviewed by Pakainfo on July 17, 2018 Rating: 5

No comments:

'Heartbroken' family of Nigerian man who died at Calgary airport wants answers

'Heartbroken' family of Nigerian man who died at Calgary airport wants answers Bolante Idowu Alo died following altercation wit...

Powered by Blogger.