Wednesday, 9 November 2011

How to fetch Youtube video from URL using PHP

Here is the Sample functions to check the url and if valid fetch the video from Youtube


function attach($dat)
{
extract($dat);
$url = trim($at_link);
//parsing begins here:
$html = $this->file_get_contents_curl($url);
if($html) {
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');

//get and display what you need:
$title = $nodes->item(0)->nodeValue;

$metas = $doc->getElementsByTagName('meta');

for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'description')
$desc = $meta->getAttribute('content');
}

if(empty($desc)) { $desc = ''; } else { $desc = " - ".$desc; }
$set = $title.$desc.' - '. $url;
return $set;
} else {
return "0";
}

}

function isValidURL($url)
{
return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}

function file_get_contents_curl($url)
{
    $curl = curl_init();

// Setup headers - I used the same headers from Firefox version 2.0.0.6
    // below was split up because php.net said the line was too long. :/
    $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
    $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
    $header[] = "Cache-Control: max-age=0";
    $header[] = "Connection: keep-alive";
    $header[] = "Keep-Alive: 300";
    $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
    $header[] = "Accept-Language: en-us,en;q=0.5";
    $header[] = "Pragma: ";
    // browsers keep this blank.

    $referers = array("google.com", "yahoo.com", "msn.com", "ask.com", "live.com");
    $choice = array_rand($referers);
    $referer = "http://" . $referers[$choice] . "";

    $browsers = array("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20060918 Firefox/2.0", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)");
    $choice2 = array_rand($browsers);
    $browser = $browsers[$choice2];

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_USERAGENT, $browser);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_REFERER, $referer);
    curl_setopt($curl, CURLOPT_AUTOREFERER, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 30);
    curl_setopt($curl, CURLOPT_MAXREDIRS, 7);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

$data = curl_exec($curl);
$info = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
preg_match( '@([-\w/+]+)(;\s+charset=(\S+))?@i', $info, $matches);  
    $mime = $matches[1];
if($mime == 'text/html') {
curl_close($curl);
return $data;
} else {
return false;
}
}

function discuss($dat)
{
extract($dat);
$url = trim($at_link);
//parsing begins here:
$html = $this->file_get_contents_curl($url);
if($html) {
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');

//get and display what you need:
$title = $nodes->item(0)->nodeValue;

$metas = $doc->getElementsByTagName('meta');

for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'description')
$desc = $meta->getAttribute('content');
}

if(empty($desc)) { $desc = $title.' - '.$url; } else { $desc = $desc.' - '.$url; }
$json = '{
"metadata": [
{
"title":"'.$title.'",
"desc":"'.$desc.'"
}
]
}';
return $json;
} else {
return "0";
}
}

function get_vcode($url)
{
 $parse = parse_url($url);
 if(!empty($parse['query'])) {
  preg_match("/v=([^&]+)/i", $url, $matches);
  return $matches[1];
 } else {
  //to get basename
  $info = pathinfo($url);
  return $info['basename'];
 }
}

function urlExists($url=NULL)
{
if($url == NULL) return false;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpcode>=200 && $httpcode<300){
return true;
} else {
return false;
}
}


function youtube($dat)
{
extract($dat);
$url = trim($y_link);

//check youtube
$video_id = $this->get_vcode($url);
$vurl = "http://gdata.youtube.com/feeds/api/videos/".$video_id;
if($this->urlExists($vurl)) {
$json = '{
"metadata": [
{
"code":"'.$video_id.'"
}
]
}';
return $json;
} else {
return "0";
}
}

[+/-] Read More...