M-am intilnit cu asa o sarcina sa fac extragerea datelor unui clip de pe youtube. Am facut o mica librarie, poate cuiva ii va fi de folos.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
*@package Codeigniter
* @subpackage Libraries
* @category Youtube
* @author Ciobanu Ion "http://www.it-nolimit.com"
* @version 0.1
*/
class Youtube {
public $id ='';
private $_url = "http://gdata.youtube.com/feeds/api/videos/";
private $data;
public $width = 640;
public $height = 390;
public $link;
public $title;
function __construct($param = array())
{
if (count($param) --> 0) {
$this->init($param);
}
}
public function init($param = array())
{
if (count($param) > 0){
foreach ($param as $k=>$v){
if (isset($this->$k)) {
$this->$k = $v;
}
}
}
}
/**
*@return complete url
*/
private function set_url($url)
{
return $this->_url = $url;
}
public function set_data($data)
{
$this->data = $data;
}
public function get_data()
{
return $this->data;
}
/**
*Extragem datele despre clip
*@return array()
*/
public function get_youtube_data ()
{
$this->set_url($this->_url.$this->id);
$this->set_data(file($this->_url));
$this->set_data(implode('', $this->get_data()));
$this->set_data(str_replace(array("\r\n", "\r"), "\n", $this->get_data()));
preg_match("<yt:duration seconds='(.*?)'/>", $this->get_data(), $duration);
preg_match('|<title [^>]*>(.*?)</title>|is', $this->get_data(), $title);
$min = floor($duration[1]/60);
$sec = $duration[1] %60;
$details = array(
'title'=>$title[1],
'duration'=>$min.':'.$sec,
);
$this->title = $title[1];
return $details;
}
/**
* Player-ul
* @return html
*/
public function embed_code()
{
$outupt = '<object width="'.$this->width.'" height="'.$this->height.'">';
$outupt .= '<param name="movie" value="http://www.youtube.com/v/'.$this->id.'?version=3&controls=0&rel=0&showinfo=0&feature=player_embedded" />';
$outupt .= '<param name="allowFullScreen" value="true" />';
$outupt .= '<param name="allowScriptAccess" value="always" />';
$outupt .= '<embed type="application/x-shockwave-flash" width="'.$this->width.'" height="'.$this->height.'" src="http://www.youtube.com/v/'.$this->id.'?version=3&controls=0&rel=0&showinfo=0&feature=player_embedded" allowscriptaccess="always" allowfullscreen="true"></embed></object>';
return $outupt;
}
/**
* Image
*@return html
*/
public function embed_image()
{
$output = '<img title=".$this->title." src="http://i.ytimg.com/vi/'.$this->id.'/default.jpg" border="0" alt=".$this->title." width="120" height="90" />';
return $output;
}
/**
* Verifica daca exista asa id
*
* @param $link format
* @return id or FALSE
*/
public function check_link($link)
{
//Verificam daca este link de youtube
if (!preg_match('/http:\/\/www\.youtube\.com\/watch\?v=[^&]+/', $link)) {
return FALSE;
} else {
//Extragem ID-ul
$x = explode('?v=', $link);
if(!empty($x) && isset($x[1])){
$x = explode('&', $x[1]);
$id = $x[0];
}
$header = get_headers($this->_url.$id);
//Verificam daca exista asta ID
if (!strpos($header[0], '200')) {
return FALSE;
} else {
return $id;
}
}
}
}
Controller
$v_id = $this->youtube->check_link("http://www.youtube.com/watch?v=mHTx0mhRFws&feature=autoplay&list=PLE74055EAE83B6803&index=4&playnext=25");
if($v_id){
$config['id'] = $v_id;
$config['width'] = 640;
$config['height']= 390;
$this->youtube->init($config);
$details = $this->youtube->get_youtube_data();
print_r($details);
echo $this->youtube->embed_image();
echo $this->youtube->embed_code();
}
si eu am propia librarie scris to in genul asta