[Aporte][PHP][Class] Youtube BBC parser
September 5, 2011
Bueno, esta vez les traigo un bbcode parser para youtube, el cual detecta los links que son antecedidos por un espacio o por el principio de la linea. Es mi primer code en POO, cualquier sugerencia es bienvenida.
<?php
class YoutubeBBC {
private $body, $data = array();
public function __construct($string){
$this->body = $string;
}
public function GetId(){
(empty($this->body)) ? die('Debe Especificar El String') : '';
preg_match_all('~(?<=s|^)(?:https?://)?(?:www.)?youtube.com/watch?v=([w-]{0,11})~',$this->body,$IDS);
if(!empty($IDS[1])){
foreach($IDS[1] as $id){
$this->data[$id]['ID'] = $id;
}
}else{
die("Link De Youtube Invalido");
}
}
public function GetThumbs(){
(empty($this->body)) ? die('Debe Especificar El String') : '';
(empty($this->data)) ? $this->GetId() : '' ;
foreach($this->data as $id){
$this->data[$id['ID']]['Thumbs'] = array(
'0' => 'http://img.youtube.com/vi/'. $id['ID'] .'/0.jpg',
'1' => 'http://img.youtube.com/vi/'. $id['ID'] .'/1.jpg',
'2' => 'http://img.youtube.com/vi/'. $id['ID'] .'/2.jpg',
'3' => 'http://img.youtube.com/vi/'. $id['ID'] .'/3.jpg',
);
}
}
public function GetEmbed($width = '640', $height = '385'){
(empty($this->body)) ? die('Debe Especificar El String') : '';
(empty($this->data)) ? $this->GetId() : '' ;
foreach($this->data as $id){
$this->data[$id['ID']]['Embed'] = '<center><embed width="'.$width.'px" height="'.$height.'px" wmode="transparent" autoplay="false" allowfullscreen="true" type="application/x-shockwave-flash" quality="high" src="http://www.youtube.com/v/'.$id['ID'].'"></center>';
}
}
public function GetData(){
(empty($this->body)) ? die('Debe Especificar El String') : '';
(empty($this->data)) ? $this->GetId() : '' ;
return $this->data;
}
}
?>
Se usa asi:
<?php
$BBC = new YoutubeBBC("http://www.youtube.com/watch?v=uelHwf8o7_U&feature=feedrec http://www.youtube.com/watch?v=SUMcA--ejOc&feature=feedrec"); //creamos un nuevo objeto pasando el texto con los links
$BBC->GetID(); //obtenemos los ids de los videos
$BBC->GetThumbs(); //obtenemos los thumbs de los videos
$BBC->GetEmbed(); //obtenemos el code embed de los videos, se puede pasar como primer parametro el ancho y como segundo el alto, por default 640x385
$datos = $BBC->GetData(); //obtenemos el array con todos los datos anteriores y lo almacenamos en $datos
?>
lo que devolvera un array como el siguiente;
Array
(
[uelHwf8o7_U] => Array
(
[ID] => uelHwf8o7_U
[Thumbs] => Array
(
[0] => http://img.youtube.com/vi/uelHwf8o7_U/0.jpg
[1] => http://img.youtube.com/vi/uelHwf8o7_U/1.jpg
[2] => http://img.youtube.com/vi/uelHwf8o7_U/2.jpg
[3] => http://img.youtube.com/vi/uelHwf8o7_U/3.jpg
)
[Embed] => <center><embed width="640px" height="385px" src="http://www.youtube.com/v/uelHwf8o7_U" quality="high" type="application/x-shockwave-flash" allowfullscreen="true" autoplay="false" wmode="transparent"></center>
)
[SUMcA--ejOc] => Array
(
[ID] => SUMcA--ejOc
[Thumbs] => Array
(
[0] => http://img.youtube.com/vi/SUMcA--ejOc/0.jpg
[1] => http://img.youtube.com/vi/SUMcA--ejOc/1.jpg
[2] => http://img.youtube.com/vi/SUMcA--ejOc/2.jpg
[3] => http://img.youtube.com/vi/SUMcA--ejOc/3.jpg
)
[Embed] => <center><embed width="640px" height="385px" src="http://www.youtube.com/v/SUMcA--ejOc" quality="high" type="application/x-shockwave-flash" allowfullscreen="true" autoplay="false" wmode="transparent"></center>
)
)
Leave your comment on the github issue, sending me an email or DMing me on twitter