In order for you to download youtube video, you will first need to get the youtube video info.
Get Youtube Video Info
This url will give you all the info for a youtube video.
https://www.youtube.com/get_video_info?html5=1&video_id=youtube_id
For example, if you want to download this (https://www.youtube.com/watch?v=WiOf6myUZZI ) youtube video, the youtube id would be : WiOf6myUZZI
PHP Code
In you php, type in the below code
<?php
if(isset($_GET['id']) )
{
$youtube_id = $_GET['id'];
$youtube_video_info = file_get_contents('https://www.youtube.com/get_video_info?html5=1&video_id='.$youtube_id);
echo $youtube_video_info;
}
?>
HTML/JavaScript Code
Here is the whole html code for you.
<!DOCTYPE html>
<html lang="en">
<head>
<title>YouTube Video Downloader</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js" type="text/javascript"></script>
<script>
$(document).ready(function($)
{
var youtube_data_parser = function(data)
{
//---> parse video data - start
var qsToJson = function (qs)
{
var res = {};
var pars = qs.split('&');
var kv, k, v;
for (i in pars)
{
kv = pars[i].split('=');
k = kv[0];
v = kv[1];
res[k] = decodeURIComponent(v);
}
return res;
}
//---> parse video data - end
var get_video_info = qsToJson(data);
if(get_video_info.status == 'fail')
{
return {status:"error", code: "invalid_url", msg : "check your url or video id"};
}
else
{
// remapping urls into an array of objects
//--->parse > url_encoded_fmt_stream_map > start
//will get the video urls
var tmp = get_video_info["url_encoded_fmt_stream_map"];
if (tmp)
{
tmp = tmp.split(',');
for (i in tmp)
{
tmp[i] = qsToJson(tmp[i]);
}
get_video_info["url_encoded_fmt_stream_map"] = tmp;
}
//--->parse > url_encoded_fmt_stream_map > end
//--->parse > player_response > start
var tmp1 = get_video_info["player_response"];
if (tmp1)
{
get_video_info["player_response"] = JSON.parse(tmp1);
}
//--->parse > player_response > end
//--->parse > keywords > start
var keywords = get_video_info["keywords"];
if (keywords)
{
key_words = keywords.replace(/\+/g,' ').split(',');
for (i in key_words)
{
keywords[i] = qsToJson(key_words[i]);
}
get_video_info["keywords"] = {all:keywords.replace(/\+/g,' '), arr: key_words};
}
//--->parse > keywords > end
//return data
return {status: 'success', raw_data:qsToJson(data), video_info:get_video_info};
}
}
$(document).on('click', '.btn_get_youtube_vidoe_id', function(event)
{
event.preventDefault();
var get_video_id = $('.youtube_video_id').val();
var ajax_url = 'http://localhost/?id='+get_video_id;
$.get(ajax_url, function(d1)
{
var data = youtube_data_parser(d1)
console.log( data)
var video_data = data.video_info
var video_title = video_data.title.replace(/\+/g,' ')
var video_thumbnail_url = video_data.thumbnail_url
var video_arr = video_data.url_encoded_fmt_stream_map;
//quality "hd720"
var video_arr_final = {}
$.each(video_arr, function(i1, v1)
{
if(v1.quality == "hd720")
{
var url = v1.url
video_arr_final = {
video_title:video_title,
video_thumbnail_url:video_thumbnail_url,
video_url:v1.url
}
}
});
var d = ''
+ '<br>'
+'<a class="btn btn-primary" href="'+video_arr_final.video_url+'" download="youtube.mp3"> Download</a>'
+'<video src="'+video_arr_final.video_url+'" controls autoplay controlsList="nodownload" oncontextmenu="return false;" height="350" width="100%">'
+'</video >'
$('.youtube_video').html(d)
});
});
});
</script>
</head>
<body>
<h1>Youtube Video Downloader</h1>
<br><br>
<div class="co1l-md-3">
<label for="ex1">Enter Youtube Video ID</label>
<input class="form-control youtube_video_id" type="text">
<br>
<span class="btn btn-success btn_get_youtube_vidoe_id">Get Video Info</span>
</div>
<br><br>
<div class="youtube_video"></div>
</body>
</html>