PHP: Clase simple para obtener información de videos de YouTube
Hace poco, me puse a hacer la sección de Videos de esta pagina y por supuesto la quise integrar con el gigante de los videos YouTube.
Me dirijo a la API de Datos de Youtube y me encuentro con muuuuuuuucho para leer y nada rápido para probar.
Para utilizar la API con PHP se necesita Zend Framework un framework demasiado pesadito para mi gusto (por lo poco que necesitaba), por lo que me puse a investigar y desarrolle una pequeña clase para obtener la información de los videos utilizando CURL con PHP.
En esta primera versión, podemos obtener los siguientes datos de un video:
- Titulo
- Fecha de Publicación
- Descripción
- Meta Tags
- URL en Youtube
- Imágenes
- Código del Reproductor
youtube.class.php
<?php
/*
* Name: Simple Class Info YouTube
* Description: Get Information of video YouTube
* Development: Chuecko
* Site: http://www.zarpele.com.ar
* License: GNU GENERAL PUBLIC LICENSE (http://www.gnu.org/licenses/gpl.html)
* Version: 1.0
*/
class youtube
{
var $data = '';
var $id = '';
public function youtube($id)
{
if (strlen($id) >=22)
{
parse_str( parse_url( $id, PHP_URL_QUERY ) );
$this->id = $v;
}
else
{
$this->id=$id;
}
$url = "http://gdata.youtube.com/feeds/videos/".$this->id;
$browser_id = "none";
$curl_handle = curl_init();
$options = array
(
CURLOPT_URL=>$url,
CURLOPT_HEADER=>false,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_USERAGENT=>$browser_id
);
curl_setopt_array($curl_handle,$options);
$server_output = curl_exec($curl_handle);
curl_close($curl_handle);
$this->data=$server_output;
}
public function getTitle()
{
$startString = "<media:title type='plain'>";
$endString = "</media:title>";
$tempString = strstr($this->data, $startString);
$endLocation = strpos($tempString, $endString);
$title = substr($tempString, 0, $endLocation);
if (empty($title))
{
$title=false;
}
else
{
$title=substr($title,strlen($startString));
}
return $title;
}
public function getPublished()
{
$startString = "<published>";
$endString = "</published>";
$starLocation = strpos($this->data, $startString);
$tempString = substr($this->data, $starLocation);
$endLocation = strpos($tempString, $endString);
$published = substr($tempString, 0, $endLocation);
if (empty($published))
{
$published=false;
}
else
{
$published=substr($published,strlen($startString));
$published=substr($published,0,10);
}
return $published;
}
public function getDescription()
{
$startString = "<media:description type='plain'>";
$endString = "</media:description>";
$starLocation = strpos($this->data, $startString);
$tempString = substr($this->data, $starLocation);
$endLocation = strpos($tempString, $endString);
$description = substr($tempString, 0, $endLocation);
if (empty($description))
{
$description=false;
}
else
{
$description=substr($description,strlen($startString));
}
return $description;
}
public function getMetaTags()
{
$startString = "<media:keywords>";
$endString = "</media:keywords>";
$starLocation = strpos($this->data, $startString);
$tempString = substr($this->data, $starLocation);
$endLocation = strpos($tempString, $endString);
$metaTags = substr($tempString, 0, $endLocation);
if (empty($metaTags))
{
$metaTags=false;
}
else
{
$metaTags=substr($metaTags,strlen($startString));
}
return $metaTags;
}
public function getUrl()
{
return "http://www.youtube.com/watch?v=".$this->id;
}
public function getUrlImage($option)
{
if($option=='default')
{
return 'http://i.ytimg.com/vi/'.$this->id.'/default.jpg';
}
if($option=='grande')
{
return 'http://i.ytimg.com/vi/'.$this->id.'/0.jpg';
}
if($option==1)
{
return 'http://i.ytimg.com/vi/'.$this->id.'/1.jpg';
}
if($option==2)
{
return 'http://i.ytimg.com/vi/'.$this->id.'/2.jpg';
}
if($option==3)
{
return 'http://i.ytimg.com/vi/'.$this->id.'/3.jpg';
}
}
public function getEmbeb($width, $height)
{
$autoplay = 1;
return '<iframe class="youtube-player" type="text/html" width="'.$width.'" height="'.$height.'" src="http://www.youtube.com/embed/'.$this->id.'?autoplay='.$autoplay.'" frameborder="0">
</iframe>';
}
}
?>
Obviamente, hay muchas cosas que mejorar, pero lo hice en pocas horas y me sirvió para lo que yo necesitaba.
Como lo utilizo?, bueno es una clase no hay nada extraño, pero les dejo un ejemplito…
ejemplo.php
<?php
require_once 'youtube.class.php';
/*
* Name: Simple Class Info YouTube
* Description: Get Information of video YouTube
* Development: Chuecko
* Site: http://www.zarpele.com.ar
* License: GNU GENERAL PUBLIC LICENSE (http://www.gnu.org/licenses/gpl.html)
* Version: 1.0
*/
/*
* Tambien le pueden pasar como parametro solo el ID de youtube
* $youtube = new youtube('59PyU_7iqaU');
*/
$youtube = new youtube('http://www.youtube.com/watch?v=59PyU_7iqaU');
echo 'Titulo: '.$youtube->getTitle().'<br/>';
echo 'Publicado: '.$youtube->getPublished().'<br/>';
echo 'Descripcion: '.$youtube->getDescription().'<br/>';
echo 'Meta Tags: '.$youtube->getMetaTags().'<br/>';
echo 'Link: '.$youtube->getUrl().'<br/>';
echo 'Imagen: '.$youtube->getUrlImage('default').'<br/>';
echo $youtube->getEmbeb(640, 390);
?>
Descargar Fichero PHP
Ya que están de paso, se miran el video del ejemplo ![]()
Salut…
ACTUALIZACION 27-02-2011
Ya que esta clase tuvo mucho éxito, he creado un proyecto en Google Code http://code.google.com/p/simple-class-youtube/, con el objetivo de ir mejorando el codigo, esta liberado bajo licencia GPL/v2.
ACTUALIZACION 02-07-2011
Lanzada la versión 1.1
Puedes seguir cualquier respuesta a esta entrada mediante el canal RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio.















Estoy aprendiendo POO y este código me sirvió mucho, sobre todo para comprender del todo. Gracias.
Gracias a vos por comentar…
Hola Muchisimas gracias por el código, lo he buscado hace algún tiempo y como tu mismo dices el Zend Framework no es de mi agrado tampoco.
Aunque digas que hay muchas cosas por mejorar, es gracias a ti que se podrá hacer, ya que sin tu ayuda muy pocos nos animaríamos por utilizar ésta API.
¿Como hace la clase para sacar el id? Porque en el ejemplo pone
new youtube('http://www.youtube.com/watch?v=59PyU_7iqaU');pero si pongo la direccion:
http://gdata.youtube.com/feeds/videos/http://www.youtube.com/watch?v=59PyU_7iqaU
Da error.
No encuentro la parte en la que obtiene el id de la url de youtube.
Mmmm.. me falto actualizar el codigo de la entrada, fijate que en Descargar archivo esta esto…
if (strlen($id) >=22) { parse_str( parse_url( $id, PHP_URL_QUERY ) ); $this->id = $v; } else { $this->id=$id; }Ahora arreglo la entrada…
Gracias.
Genial, sigo estudiando esta Clase. Desde hace rato que tengo ganas de un robot para twitter y me has dado las herramientas para hacermelo.
[...] Muy Personal Hace rato que deseaba un bot para microbbloging, después de leer una entrada sobre una clase de php para YouTube me surgió la idea de construirme mi propia [...]
[...] rato que deseaba un bot para microbbloging, después de leer una entrada sobre una clase de php para YouTube me surgió la idea de construirme mi propia [...]
Gracias por compartila…
saludos, me da un error como este, me podrias ayudar:
Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\uxu\_private\cla_youtube.php on line 23
supongo que no encuentra definida la funcion curl_init(); y en definitiva no esta declarado en la clase, me pregunto si es una funcion propia de php o debíara ser declarado en otro lugar.
olvidaba, utilizo xamp para mis proyectos…
Solucionado
Lo he solucionado,

Si le dan en siguiente error:
Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\uxu\_private\cla_youtube.php on line 23
Para lo que usan la distribución xampp
deben modificar el archivo php.ini de php y php.ini de apache en la linea donde dice
;curl_library o algo parececido
quitar la ” ; ”
quedaría así
curl_library
a mi me funciona de palos…
Gracias por compartirla…
@joe Me alegro que te haya servido y que solucionaste tu problema rapidamente, Deje el blog abandonado por falta de tiempo y no te pude contestar.
Saludos y gracias por comentar.
Hola estuve checando el script pero me arroja este error alguien tiene idea de como solucionarlo?
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in
mmm. si tienes mas datos al respecto te agradeceria, que version de PHP estas usando?
Hola

Muy interesante tu code
Gracias por compartirlo con todos
Una consulta por alli sabes.
Como se puede obtener:
1- El usuario que subio el video a youtube.
2- La cantidad de reproducciones del video.
3- Obtener y listar los comentarios en youtube de ese video.
mmmm Creo que es medio complicado
Gracias y saludos
pues puedes obtener mas informacion haciendo un var_dump del xml que nos devuelve youtube, ahi hay mucha mas info…
Saludos y gracias por comentar…
muchas gracias por compartir !!!
A ti por comentar!!!
Muchas gracias por responder
Muy bueno tu código anda de 10.
Y como hago un var_dump del xml ?
algún codiogo tenes a mano?
Lo único que pude agregar fue para obtener solo el ID
Se los dejo por si alguien lo necesita y ademas para retribuir un poquito aunque sea
en: youtube.class.php agegamos
public function getID() { return $this->id; }en: ejemplo.php agregamos
Y ademas pueden poner que no sea autoplay el video
en: youtube.class.php modificamos
public function getEmbeb($width, $height) { $autoplay = 1; // 0= desactivado, 1= activado return 'id.'?autoplay='.$autoplay.'" frameborder="0"> '; }$autoplay = 1; por $autoplay = 0;
Espero que les sirva a alguien.
La verdad que el código que nos regalo amablemente Zarpele es escalable.
Espero que me puedan ayudar en mi solicitud.
Gracias y saludos
el XML que nos devuelve los amigos de Youtube se guarda en $data, podes agregar una función…
getData{ return $this->data; }luego en ejemplo.php agregar
Si quieres informacion de var_dump, te aconsejo que mires el manual ofical
Espero que te haya servido y gracias por comentar…
Salut!
excelente, una clase realmente util, un saludo desde peru
¡¡NO A LA LEY SINDE !!
¡¡NO A LA LEY SINDE !! +1
Yo tengo una duda, todo el manejo de string para obtener la descripcion, el titulo, etc. en vez de hacer tantas funciones, no se podria reemplazar por una regex??
saludos!
Claro, esta función, es mejorable. Voy a ver si en estos días trato de mejorarla, ya sea agregando funcionalidad así como optimizando su uso.
Su cada uno aporta su parte, podemos hacer la clase mucho mas funcional.
SaluT
Bueno, gracias.. tengo una ultima duda, de donde consiguen las url para extraer los datos como lo es http://gdata.youtube.com/feeds/videos/$id en este caso??
saludos!!
Hola buenas sigo esto activo?
Este codigo esta perfecto, gracias por compartirlo.
Les pregunto se puede sacar una serie de videos? Es decir si el cliente sube sus videos a su canal de youtube. Que automaticamente coja la url del video y la muestre en la web
Si sigue activo, actualmente estoy desarrollando una nueva versión.
Gracias a vos por comentar..
No entiendo bien lo ultimo que me pusiste, lo que si se puede hacer es obtener los ultimos videos de un usuario y consultarlo con esta clase. Es facil…
Perfecto que sigue activo
Le comento, yo tengo un canal de youtube donde tengo 10 videos subidos.
Y mediante esta clase quiero mostrar los 10 videos en mi pagina web.
Pero que dichos enlaces de los videos no tenga yo indicarselos, sino que los coja automaticamente de alguna manera, nose si es mediante RSS o algo.
Porque este canal ira aumentando de videos, y quiero que si subo un video a youtube, pues automaticamente esta clase lea el enlace (del documento o como sea) y me lo muestre en mi web.
Solo consigo mostrar 1 video e indicandole yo el enlace.
Un Saludo y muchas gracias!!
Hola me parece fantástico tu trabajo, me ilusione al encontrarlo, pero necesito preguntartea algo, mi caso es que necesito que puedan acceder a una cuenta privada, es decir que yo les pase la url del video que está en privado y puedan verlo desde la web, he modificado la dirección del video de tu script y me sale “que debo tener acceso ya que se trata de un video…”
Puedes ayudarme??
Mil gracias
[...] ejemplo.php view source [...]
[...] tiempo ya, Septiembre 24 del 2010 para ser mas especifico, escribí una clase en PHP para poder obtener información de los videos de Youtube liberada bajo licencia [...]
Hey hermano.. Gracias por compartirlo, lo andaba buscando hace arto tiempito jeje…
bueno Saludos
Gracias amigo.
Salio una nueva version
Hola que tal
.. ah orale, Genial pues, y puede ser el link?
Este código es fantástico, funciona perfectamente.
Sabes como poder obtener todos los videos de un usuario en concreto?
Gracias.
Hola muy bueno tu codito pero veo que en donde se pone el link en tu ejemplo de sample.php en la seccion:
$url = ‘http://www.youtube.com/watch?v=5ocq6_3-nEw’;
ahi especificas una url, pero que pasa si es por busqueda es decir si quiero poner una banda de rock nose.. “Metallica” como hago para que salga esa busqueda?. Y que cree un playlist. Estoy que quiero hacer algo asi pero tengo unas mejores ideas y quiero mejorarla: http://www.tubalr.com/
espero tu ayuda amigo.
Saludos dede PERU!
Tavitooo
[...] http://www.zarpele.com.ar/2010/09/ph…os-de-youtube/ [...]
[...] http://www.zarpele.com.ar/2010/09/ph…os-de-youtube/ [...]
Se que para sacar la dureccion del video esta en segundos ejemplo un video de 1 minuto en su xml esta en 60 que es 60 segundos. como saco ese numero. osea los 60… ya para que uno pueda tener una funcion en convertirlo en minutos . solo necesito eso.. sacar los segundos del video!!
Hola,
Estimado, muy bueno el código pero no funciona el Google Chrome ?
Saludos
El codigo php se ejecuta siempre en el servidor, no en el cliente. Por lo que es indistinto que navegador uses.
Saludos.
De maravillas, excelente esto, un pequeño aporte: Ver los comentarios de los videos y quien comentó:
Código: youtuble.class
public function getComment()
{
if ($this->valid()){
$this->come = ‘http://gdata.youtube.com/feeds/api/videos/’.$this->id.’/comments’;
$this->xmlcome = new SimpleXMLElement($this->come, NULL, TRUE);
//return $this->xmlcome->entry->content ;//ver comentarios
return $this->xmlcome->entry->author->name ;//ver autor comentario
}else{
return false;
}
}
Código: sample.php
Coments:
getComment()?>
->Saludos.
Gracias, lo tendre en cuenta para la proxima version.
Está genial . Muchas gracias por compartir . Lo he probado y funciona bien … sólo hay un problema … No me recoge los acentos y las ñ … ufff … ¿ Alguien sabe como arreglarlo ? claro que se puede crear un patrón y sustituir todas las letras pero es algo farragoso …
Una cosa más … ¿ alguien sabe cómo obtener un listado de todos los vídeos subidos por un usuario concreto ?