Listando vídeos do YouTube com PHP

Neste pequeno artigo irei disponibilizar esta classe bem simples para listar os vídeos de um determinado usuário através dos feeds do YouTube.

Para que a classe funcione, é necessário que as extensões cURL e SimpleXML estejam habilitadas no seu servidor apache. Eis o código da classe:


<?php

/**
 * Class YT_Video
 * Get an array of the most recent videos of the specified username
 *
 * @abstract
 * @example $videos = YT_Videos::getUserVideos('username');
 */
abstract class YT_Videos
{
    /**
     * @var string URL to youtube feeds
     * @static URL of youtube feeds
     */
    private static $youtube_feedUrl = 'http://gdata.youtube.com/feeds/base/users/%s/uploads?orderby=updated&v=2';

    /**
     * @static
     * @method array getUserVideos($username) Get the videos from $username
     * @return array Returns an array of videos
     * @return NULL Returns NULL if the user does not exists
     */
    public static function getUserVideos($username)
    {
        $cURL = curl_init(sprintf(self::$youtube_feedUrl, $username));
        curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, true);
        $cURL_result = curl_exec($cURL);
        curl_close($cURL);

        $xml = new SimpleXMLElement($cURL_result);

        if($xml->getName() == 'erros') { return NULL; }

        $videos = array();
        foreach($xml->entry as $video)
        {
            /*
             * Separa a URL para pegar o id do vídeo
             */
            $url = (string)$video->link['href'];
            parse_str(parse_url($url, PHP_URL_QUERY), $params);
            $id = $params['v'];

            /*
             * Preenche um array com os dados do vídeo
             */
            $videos[] = array(
                'id'    => $id,
                'title' => (string)$video->title,
                'thumb' => 'http://i' . rand(1, 4) . '.ytimg.com/vi/' . $id . '/hqdefault.jpg',
                'url'   => $url
            );
        }

        return $videos;
    }
}

?>

Agora para usar a classe é incluir ela e chamar de forma estática o método “getUserVideos”. Veja o exemplo:

...
$videos = YT_Videos::getUserVideos('andreoav');
// Este teste verifica se o usuário existe, já que o método retorna NULL caso usuário não exista, ou que algum outro erro tenha acontecido.
if(!$videos)
{
    // Listamos os videos aqui.
}

Espero que tenham gostado!!

Este método é uma implementação em forma de classe baseado no post do Thiago Belem.

Anúncios
  1. Obrigado por colocar os créditos e parabéns pela classe! 🙂

      • Andreo Vieira
      • 5 fevereiro, 2011

      Nem repara na utilidade de transforma em classe!! HASusuh
      Fiz só pra da uma treinada em PHP….

    • andre
    • 19 abril, 2011

    E ai Thiago, acredito que esteja mesmo mto bom! porem aqui nao funcionou, tenho o cURL e o SimpleXML habilidatos e copiei o codigo certinho, nao alterei nada.. utilizo o vertrigo para rodar o apache. Acontece que a pagina fica carregando e nao aparece nada!
    abraço

      • Andreo Vieira
      • 19 abril, 2011

      Teste a classe novamente aqui e está normal!
      Você está tentando pegar vídeos do usuário correto, da uma olhadinha.

      Qualquer coisa manda seu código ai pra gente da uma olhada!

        • andre
        • 19 abril, 2011

        Sim! Já testei com o usuario do exemplo e com o meu usuario no youtube!

        postei o erro que apareceu depois de muito tempo que a pagina estava carregando!

        obrigado pela resposta!
        Andre

    • andre
    • 19 abril, 2011

    Agora me aparece este erro:

    Fatal error: Uncaught exception ‘Exception’ with message ‘String could not be parsed as XML’ in C:\Program Files (x86)\VertrigoServ\www\proj_cdm2\index.php:16 Stack trace: #0 C:\Program Files (x86)\VertrigoServ\www\proj_cdm2\index.php(16): SimpleXMLElement->__construct(”) #1 {main} thrown in C:\Program Files (x86)\VertrigoServ\www\proj_cdm2\index.php on line 16

    Nesta parte do codigo:
    // Inicia o parseamento do XML com o SimpleXML
    $xml = new SimpleXMLElement($resultado);

    podes me ajudar?
    obrigado

    Abraço

      • Andreo Vieira
      • 19 abril, 2011

      Tem como você mandar a parte completa do código que você está tentando usar a classe?

        • andre
        • 19 abril, 2011

        Seguinte, eu nao fiz nada, apenas copiei o codigo do artigo, criei uma pagina .php e colei o codigo dentro e rodei atraves do vertrigoServ. A classe é a mesma do codigo postado no artigo entendeu? Eu estava testando, antes de colocar no meu site.

    • Fran Santos
    • 1 setembro, 2014

    Olá, se eu quiser inserir a descrição dos vídeos também? como Devo fazer? tem como?

  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: