<?php
define("ANY",0);
define("PC",1);
define("MOBILE",2);
/**
* This class fetching live streaming links of youtube videos, both for mobile (real player) and PC (flash player)
*
*@author Rochak Chauhan [www.dmwtechnologies.com]
*/
class YouTubeAPI {
private $startIndex=1;
private $format=PC;
private $maxResults=10;
private $keyword="";
private $feedString="";
private $downloadUrl="http://demo.dmwtechnologies.com/YouTubeDownloader/index.php";
public function __construct($keyword,$maxResults=10,$startIndex=1,$format=ANY) {
$this->keyword=$keyword;
$this->format=$format;
$this->maxResults=$maxResults;
$this->startIndex=$startIndex;
$url="http://gdata.youtube.com/feeds/api/videos?vq=$keyword&start-index=$startIndex&max-results=$maxResults";
$this->feedString=$this->getXmlCodeViaFopen($url);
}
/**
* Function to get the XML code from the YouTubeAPI
*
* @param string $url
* @access private
*
* @return string
*/
private function getXmlCodeViaFopen($url){
$returnStr="";
$fp=fopen($url, "r") or die("ERROR: Illigal YouTube API URL");
while (!feof($fp)) {
$returnStr.=fgetc($fp);
}
fclose($fp);
return $returnStr;
}
/**
*Function to download remote content of an URL using wget
*
*@author Rochak Chauhan
*@param string $url
*
*@return string
*/
private function getHtmlCodeViaWget($url){
//get HTML CODE
$rand=".".microtime(true)."_".rand(0,9999999);
$tmp="tmp".$rand.".html";
system("wget -q $url -O - >> $tmp");
system("chmod 777 $tmp");
system("chown ".FTP_USER.":".FTP_USER." $tmp");
$returnStr=file_get_contents($tmp);
unlink($tmp);
return $returnStr;
}
/**
*Function to download remote content of an URL via cURL
*
*@author Rochak Chauhan
*@param string $url
*
*@return string
*/
private function getHtmlCodeViaCurl($url){
$userAgent=array();
$userAgent[]="Opera/9.50 (Windows NT 5.1; U; en)";
$userAgent[]="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13";
$userAgent[]="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FDM; MEGAUPLOAD 1.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)";
$userAgent[]="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12";
$userAgent[]="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; FDM; MEGAUPLOAD 1.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)";
$userAgent[]="Mozilla/5.0 (Windows; U; Windows NT 5.1; en) AppleWebKit/522.15.5 (KHTML, like Gecko) Version/3.0.3 Safari/522.15.5";
$total1=count($userAgent)-1;
$rand1=rand(0,$total1);
$curl = curl_init() or die("FATAL ERROR: cURL support is not found on this server.");
curl_setopt($curl, CURLOPT_USERAGENT, $userAgent[$rand1]);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 20);
return curl_exec($curl);
}
/**
* Function to get the Title from the XML/RSS Feed
*
* @param string $str
* @access private
* @return string
*/
private function getTitle($str) {
$final=array();
$returnArray=array();
$pattern="/<title type='text'>(.*)\<\/title\>/Uis";
preg_match_all($pattern, $str, $returnArray, PREG_SET_ORDER);
if(isset($returnArray[0][1])) {
return $returnArray[0][1];
}
else {
return "NA";
}
}
/**
* Function to get the FLV/SWF url from the XML/RSS Feed
*
* @param string $str
* @access private
* @return string
*/
private function getFlvUrl($str) {
$final=array();
$returnArray=array();
$pattern="/<media:player url='(.*)'/Uis";
//$pattern="/<media:content url='(.*)' type='application\/x-shockwave-flash'/Uis";
preg_match_all($pattern, $str, $returnArray, PREG_SET_ORDER);
if(isset($returnArray[0][1])) {
return $returnArray[0][1];
}
else {
return "#";
}
}
/**
* Function to get the mobile streaming url from the XML/RSS Feed
*
* @param string $str
* @access private
* @return string
*/
private function getMobileUrl($str) {
$final=array();
$returnArray=array();
$pattern="/<media:content url='(.*)' type='video\/3gpp'/Uis";
preg_match_all($pattern, $str, $returnArray, PREG_SET_ORDER);
if(isset($returnArray[1][1])) {
return $returnArray[1][1];
}
else {
return "#";
}
}
/**
* Function to get the video thumbnail from the XML/RSS Feed
*
* @param string $str
* @access private
* @param boolean $returnAllThumbsAsArray
* @return string
*/
private function getThumbnailUrl($str,$returnAllThumbsAsArray=false) {
$final=array();
$returnArray=array();
$imgArray=array();
$imgPattern="/<media:thumbnail url='(.*)'/Uis";
preg_match_all($imgPattern, $str, $tmp, PREG_SET_ORDER);
$c=count($tmp);
$l=-1;
foreach($tmp as $key=>$value){
$value=$value[1];
$imgArray[]=$value;
}
if($returnAllThumbsAsArray===true){
return $imgArray;
}
else{
return $imgArray[3];
}
}
/**
* Function to get Streaming link info
*
* @param string $feed
* @access public
* @return array
*/
public function getStreamingLinks() {
$feed=$this->feedString;
$final=array();
$returnArray=array();
$pattern="/<title type='text'>(.*)<category scheme='http:\/\/gdata.youtube.com\/schemas\/2007\/keywords.cat'/Uis";
preg_match_all($pattern, $feed, $returnArray, PREG_SET_ORDER);
for($i=1;$i<count($returnArray);$i++){
$str=$returnArray[$i][0];
$title=$this->getTitle($str);
$flvUrl=$this->getFlvUrl($str);
$mobileUrl=$this->getMobileUrl($str);
$thumbnailUrl=$this->getThumbnailUrl($str);
if ($this->format==PC) {
$final[]=array("title"=>$title,"flvurl"=>$flvUrl,"thumbnailUrl"=>$thumbnailUrl);
}
elseif ($this->format==MOBILE) {
$final[]=array("title"=>$title,"mobileurl"=>$mobileUrl,"thumbnailUrl"=>$thumbnailUrl);
}
else {
$final[]=array("title"=>$title,"flvurl"=>$flvUrl,"mobileurl"=>$mobileUrl,"thumbnailUrl"=>$thumbnailUrl);
}
}
return $final;
}
/**
* Function to get the downloadable link of the flv file
*
* @param string $youtubeUrl
* @return array on success else false
* @access public
*/
public function getDownloadLink($youtubeUrl) {
// get download link Page
$post_data="url=$youtubeUrl";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->downloadUrl);
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$htmlCode = curl_exec($ch);
curl_close($ch);
$returnArray=array();
// extract link from the htmlcode
$pattern="/<a href='(.*)\<\/a\>/Uis";
preg_match_all($pattern, $htmlCode, $returnArray, PREG_SET_ORDER);
if(isset($returnArray[0][1])) {
$str=trim($returnArray[0][1]);
$pos=strpos($str,"'");
$link=substr($str,0,$pos);
$title=strip_tags($returnArray[0][0]);
return array("title"=>$title,"link"=>$link);
}
else {
return false;
}
}
}
?>