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 the 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.
The YouTubeDownloader class helps to retrieve video info and file URL from YouTube video using PHP. This class used the following helper methods to get the YouTube video download link.
file_get_contents()
method in 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;
}
}
Upload Video to YouTube using PHP
Use the helper functions of the YouTubeDownloader class to get the download link from YouTube video. The following example code shows how to download the YouTube video file using PHP.
getDownloader()
function.setUrl()
function.hasVideo()
function.getVideoDownloadLink()
function.<?php
// Load and initialize downloader class
include_once 'YouTubeDownloader.class.php';
$handler = new YouTubeDownloader();
// Youtube video url
$youtubeURL = 'https://www.youtube.com/watch?v=f7wcKoEbUSA';
// 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.";
}
?>
Get Videos from YouTube Channel using PHP
Our example code provides a simple way to download video from YouTube using PHP. You can download any video from YouTube by providing the video URL. The video from YouTube can be downloaded in MP4 or any popular video format. Also, you can use the YouTubeDownloader library to build a YouTube video downloader with PHP.
Do you want to get implementation help, or enhance the functionality of this script? Click here to Submit Service Request
Great…Thanks…
Can you add the script of index.php please…
Can you please make a youtube to mp3 converter ?
nice
how can i play the video diekt instead of downloading it?
thanks a lot, but i only get the video in 360 p resolution. Is it normal ?
How to display the link on the page?
Nice script
I’m Bought This Script…It’s Work…Very Nice…How to get Adsense to This ? and how to place adsense verifying code to script
thank you so much i would like to know how to change video format to 360 ?