PHP: Clase simple para obtener información de videos de YouTube v1.1

Hace bastante 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 GPL/v2.

Esta entrada tuvo muchas visitas y comentarios, así que decidí sacar la versión 1.1 con nuevas funcionalidades y mejoras en performance. El código lo pueden encontrar en este proyecto de Google Code:

En el mismo podrán hacer comentarios, sugerencias y bajarse el código con un ejemplo. También encontraran una Wiki para poder empezar a usar la clase…

En esta v1.1, podemos obtener los siguientes datos:

  • Title.
  • Valid (is a valid video?)
  • Published.
  • Updated.
  • Category.
  • Tags.
  • Content.
  • Description.
  • Link.
  • Images.
  • Author Name.
  • Author Url.
  • Author Uri.
  • Embed Code.

Les dejo el código para aquellos que les gusta el copy/paste…
youtube.class.php

<?php
/*
 * Name: Simple Class YouTube
 * Description: Get Information of YouTube video
 * Site: http://www.zarpele.com.ar
 * License: GNU GENERAL PUBLIC LICENSE (http://www.gnu.org/licenses/gpl.html)
 * Version: 1.1
 */

class Youtube
{
    var $data = '';
    var $xml = '';
    var $id = '';

    private function youtubeCurl($url){
        $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);
        return $server_output;
    }

    public function __construct($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;
        $server_output = $this->youtubeCurl($url);

        if($server_output == 'Invalid id'){
            return false;
        }else{
            $this->data = $server_output;
            $description = $this->prepareDescription();
            $this->xml = new SimpleXMLElement($this->data);
            $this->xml->addChild('description', $description);
            return true;
        }
    }

    public function getData(){
        return $this->data;
    }

    public function getXml(){
        return $this->xml;
    }

    public function valid(){
        if(empty($this->data)){
            return false;
        }else{
            return true;
        }
    }

    /* DATA VIDEO */
    public function getTitle(){
        if ($this->valid()){
            return $this->xml->title;
        }else{
            return false;
        }
    }

    public function getPublished()
    {
        if ($this->valid()){
            return $this->xml->published;
        }else{
            return false;
        }
    }

    public function getUpdated()
    {
        if ($this->valid()){
            return $this->xml->updated;
        }else{
            return false;
        }
    }

    public function getCategory()
    {
        if ($this->valid()){
            $category = '';
            for ($i = 0; $i < count($this->xml->category);$i++){
                if ($this->xml->category[$i]['scheme'] == 'http://gdata.youtube.com/schemas/2007/categories.cat'){
                    $category = $this->xml->category[$i]['label'];
                    break;
                }
            }
            return $category;
        }else{
            return false;
        }
    }

    public function getTags(){
        if ($this->valid()){
            $tags = array();
            for ($i = 0; $i < count($this->xml->category);$i++){
                if ($this->xml->category[$i]['scheme'] == 'http://gdata.youtube.com/schemas/2007/keywords.cat'){
                    $name = $this->xml->category[$i]['term'];
                    array_push($tags, $name);
                }
            }
            return $tags;
        }else{
            return false;
        }
    }

    public function getContent()
    {
        if ($this->valid()){
            return $this->xml->content;
        }else{
            return false;
        }
    }

    public function getDescription()
    {
        if ($this->valid()){
            return $this->xml->description;
        }else{
            return false;
        }
   }

    private function prepareDescription()
    {
        $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 getUrl()
    {
        if ($this->valid()){
            return 'http://www.youtube.com/watch?v='.$this->id;
        }else{
            return false;
        }
    }

    public function getImageUrl($option)
    {
        if ($this->valid()){
            if($option == 'default'){
            return 'http://i.ytimg.com/vi/'.$this->id.'/default.jpg';
            }
            if($option == 0){
                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';
            }
        }else{
            return false;
        }
    }

    /* AUTHOR MEHTODS */
    public function getAuthorName(){
        if ($this->valid()){
            return $this->xml->author->name;
        }else{
            return false;
        }
    }

    public function getAuthorUrl(){
        if ($this->valid()){
            return 'http://www.youtube.com/user/'.$this->getAuthorName();
        }else{
            return false;
        }
    }

    public function getAuthorUri(){
        if ($this->valid()){
            return $this->xml->author->uri;
        }else{
            return false;
        }
    }

    /* see: http://code.google.com/apis/youtube/player_parameters.html */
    public function getEmbeb($options = NULL)
    {
        $width = $options['width'];
        if (!isset($options['width'])){
            $width = 425;
        } //Width
        unset($options['width']);

        $height = $options['height'];
        if (!isset($options['height'])){
            $height = 349;
        } //Height
        unset($options['height']);

        $secure = '';
        if (isset($options['https'])){
            if ($options['https'] == 1){
                $secure = 's';
                unset($options['https']);
            }else{
                $secure = '';
                unset($options['https']);
            }
        }

        if(empty($options)){
            $exclamation = '"';
        }else{
            $exclamation = '?';
        }

        $embeb_code = '<iframe class="youtube-player" type="text/html" width="'.$width.'" height="'.$height.'" src="http'.$secure.'://www.youtube.com/embed/'.$this->id.$exclamation;

        $i = 1;
        foreach($options as $key => $value){
            if($i == count($options)){
                $embeb_code .= $key.'='.$value.'"';
            }else{
                $embeb_code .= $key.'='.$value.'&';
            }
            $i++;
        }
        $embeb_code .= '></iframe>';

        return $embeb_code;
    }
}

?>

sample.php

<?php
/*
 * Name: Simple Class Info YouTube
 * Description: Get Information of YouTube video
 * Site: http://www.zarpele.com.ar
 * License: GNU GENERAL PUBLIC LICENSE (http://www.gnu.org/licenses/gpl.html)
 * Version: 1.1
 */?>
<?php
require_once 'youtube.class.php';

$url = 'http://www.youtube.com/watch?v=5ocq6_3-nEw';
$youtube = new Youtube($url);

//$id = '5ocq6_3-nEw';
//$youtube = new Youtube($id);
?>

<h2>Video Data</h2>
<p>
    <strong>Title: </strong>
    <?php echo $youtube->getTitle()?>
</p>

<p>
    <strong>Valid: </strong>
    <?php var_dump($youtube->valid())?>
</p>

<p>
    <strong>Published: </strong>
    <?php echo $youtube->getPublished()?>
</p>

<p>
    <strong>Updated: </strong>
    <?php echo $youtube->getUpdated()?>
</p>

<p>
    <strong>Category: </strong>
    <?php echo $youtube->getCategory()?>
</p>

<p>
    <strong>Tags: </strong>
    <?php var_dump($youtube->getTags())?>
</p>

<p>
    <strong>Content: </strong>
    <?php echo $youtube->getContent()?>
</p>

<p>
    <strong>Description: </strong>
    <?php echo $youtube->getDescription()?>
</p>

<p>
    <strong>Link: </strong>
    <?php echo $youtube->getUrl()?>
</p>

<p>
    <strong>Imagen: </strong>
    <?php echo $youtube->getImageUrl('default')?><br/>
    <img src="<?php echo $youtube->getImageUrl('default')?>" alt=""/>
    <img src="<?php echo $youtube->getImageUrl(0)?>" alt=""/>
    <img src="<?php echo $youtube->getImageUrl(1)?>" alt=""/>
    <img src="<?php echo $youtube->getImageUrl(2)?>" alt=""/>
    <img src="<?php echo $youtube->getImageUrl(3)?>" alt=""/>
</p>

<h2>Author Data</h2>
<p>
    <strong>Author Name: </strong>
    <?php echo $youtube->getAuthorName()?>
</p>

<p>
    <strong>Author Url: </strong>
    <?php echo $youtube->getAuthorUrl()?>
</p>

<p>
    <strong>Author Uri: </strong>
    <?php echo $youtube->getAuthorUri()?>
</p>

<p>
    <strong>Video: </strong><br/>
    <?php $options = array('autoplay' => 1);?>
    <?php echo $youtube->getEmbeb($options);?>
</p>

Google Code Page | http://code.google.com/p/simple-class-youtube/

Deja tu comentario…

The Gmail man

Prometo volver!!! y con todo!!!

Sitting is Killing You!

Felicitación sorpresa de Microsoft a Linux por su 20 aniversario

Microsoft ha participado en el concurso de vídeos de Linux, una iniciativa de la Linux Foundation que busca reconocer los 20 años del nacimiento del sistema operativo de código abierto.

Seguramente cuando pusieron en marcha el concurso de vídeos conmemorativos del aniversario de Linux, pocos pensaban que Microsoft entraría en escena, pero la empresa de Redmond ha decidido mandar una original felicitación.

Se trata de un vídeo animado donde aparece Tux, el pingüino de Linux, y un clon de Bill Gates, y se representan los difíciles comienzos del sistema de código abierto y su rivalidad con Windows.

Microsoft explica en el vídeo que consideraba las ideas de Linux como demasiado pueriles e intentó desanimar a la organización en su proyecto.

Poco antes de llegar al final de la reproducción, la empresa de Steve Ballmer deja abierta la puerta a una hipotética reconciliación, ya que aparece en escena la frase “Microsoft and Linux?”.

La noticia llega después de conocerse que Microsoft es el quinto mayor contribuyente al kernel Linux 3.0.

Visto en | The Inquirer ES

Microsoft y su gran contribución a Linux 3.0

Microsoft se situa en la parte alta de las compañías que contribuyen con código al kernel Linux casi que se merece una nueva máxima.

Como informan en The H Open en un artículo que merece una lectura dedicada, Microsoft es la séptima compañía en nivel de aportaciones de código a la versión en desarrollo del kernel Linux 3.0 con 361 cambios presentados, cifra nada despreciable aún en comparación con los 1.085 provistos por desarrolladores independientes, los 1.000 de Red Hat o los 839 de Intel.

Además, es un programador a sueldo de los de Redmond, K. Y. Srinivasan, quien se sitúa a la cabeza de las contribuciones por desarrollador con 343 cambios menores presentados hasta el momento. Y no por ser menores son menos apreciados, todo lo contrario: los desarrolladores del kernel prefieren unas pocas líneas de código que resuelvan el trabajo a porciones grandes que terminen aumentando en un MB el tamaño del núcleo.

Es más que probable es que los cambios referidos a cargo de Microsoft y sus desarrolladores tengan que ver con la interoperabilidad de alguno de sus productos con Linux, pero los aportes ahí están.

Visto en | MuyLinux

Android es el sueño de Linux hecho realidad, según Google

No cabe duda que Android ha tenido mucho éxito en el mercado de los dispositivos móviles, posicionándose rápidamente a la cabeza entre los sistemas operativos de smartphones. Y como Android está basado en Linux, Google considera que su software es el sueño de Linux hecho realidad, según indicó Chris DiBona, gerente de Open Source dentro de la empresa, a Der Standard.

“Android es el sueño hecho realidad. Es tu escritorio de Linux, es la historia de éxito de Linux en la que he estado trabajando personalmente desde 1995″, dijo.

Android fue construido sobre Linux, aunque a diferencia de la mayoría de los sistemas operativos de este tipo está pensado para plataformas móviles y no para escritorio. El “sueño de Linux” originalmente era llegar a los escritorios, de modo que visto de esa manera todavía no estaría completado. La duda que hay es si los escritorios seguirán siendo tan importantes a futuro.

DiBona dijo también que el 30% de la empresa usa Linux para trabajar, mientras que el resto corre Mac OS X – recordemos que la compañía decidió el año pasado abandonar Windows.

“Los escritorios de los ingenieros en su mayoría corren Linux. Tenemos nuestra propia derivación de Ubuntu llamada ‘Goobuntu’ para eso, que integra nuestra red y algunas herramientas extra construidas para los desarrolladores”, dice.

¿Crees que Android ha completado el sueño de Linux?

Link: Google: “Android is the Linux desktop dream come true” (Der Standard)
Link: Android es el sueño de Linux hecho realidad, según Google – FayerWayer

 
Follow Me Hazte Fan Subscribe