Cadastro de Vídeos do YouTube com PHP

Fala pessoal, beleza? Vocês já precisaram incluir um vídeo do YouTube de forma dinâmica em algum site? Sim? Então esse post é para vocês.

Hoje irei explicar como fazer um cadastro de vídeos do YouTube com PHP de forma simples e rápida.. Vamos ao tutorial!

Primeiro vamos criar a tabela videos responsável por armazenar os dados:

CREATE TABLE `videos` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `video_id` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;

Feito isso, vamos criar um formulário para cadastro dos vídeos, ele irá conter os campos title e url onde serão preenchidos o título e o endereço do vídeo no YouTube respectivamente.

<form method="post" action="save.php">
  <label for="title">Título:</label>
  <input type="text" name="title" id="title" size="40" maxlength="40"/>

  <label for="url">Endereço:</label>
  <input type="text" name="url" id="url" size="60"/>

  <input type="submit" value="Cadastrar" />
</form>
Observe que definimos o tipo de envio do formulário para post pois não queremos passar os dados pela url.

Agora vamos fazer a página save.php que conterá o código responsável por salvar os vídeos no banco de dados.

<?php
// Inclui arquivo de conexão com banco de dados
include_once 'database.php';

// Verifica se o formulário foi submetido e se é uma requisão do tipo POST
if($_SERVER['REQUEST_METHOD'] == 'POST'){
  // Armazena os dados enviados em uma variável
  $post = $_POST;
  
  // Verifica se o título (mínimo 5 caracteres) e o endereço foram preenchidos
  if(isset($post['title']) && $post['title'] && strlen($post['title']) >= 5 && isset($post['url']) && $post['url']){
    // Filtra o título (remove tags HTML)
    $title = filter_var($post['title']);
    
    // Analisa o endereço do vídeo (parse)
    $subString = parse_url($post['url']);
    
    // Verifica se tem o índice 'query' no array obtido pelo parse acima
    if(isset($subString['query']) && $subString['query']){
        // Analisa a string de 'query' para encontrar o id do vídeo
        parse_str($subString['query'], $output);
          
        // Se tiver a variável 'v' na url e tiver um id setado, então cadastra o vídeo
        if(isset($output['v']) && $output['v']){
            
          // Prepara uma sentença para ser executada
          $statement = $pdo->prepare('INSERT INTO videos (title, video_id) VALUES (:title, :video_id)');
          // Preenche os parâmetros com os dados a serem salvos
          $statement->bindParam(':title', $title);
          $statement->bindParam(':video_id',   $output['v']);
          
          // Cadastra o vídeo no banco de dados
          if($statement->execute()){
            // Definimos a mensagem de sucesso
            $_SESSION['message'] = 'Vídeo cadastrado com sucesso';
          }else{
            // Definimos a mensagem de erro
            $_SESSION['message'] = 'Falha ao cadastrar vídeo';
          } 

        }else{
          $_SESSION['message'] = 'Endereço do vídeo inválido';
        }
    }else{
      $_SESSION['message'] = 'Endereço do vídeo inválido';
    }
  }else{
    $_SESSION['message'] = 'Preencha todos os campos (título deve ter no mínimo 5 caracteres)';
  }
}
// Redireciona para a página inicial
header('Location: index.php');
?>

Primeiro incluímos o arquivo database.php responsável por fazer a conexão com o banco de dados via PDO (clique aqui para saber mais sobre PDO), depois verificamos se o formulário foi submetido e se os campos estão válidos. Por fim, salvamos o vídeo no banco, mas espera ai, na verdade salvamos apenas o id dele..

Observe que se pegarmos qualquer url de vídeo do YouTube iremos ver que ela possui um parâmetro v com um código, esse código é o id do vídeo. Ex: http://www.youtube.com/watch?v=yMLzB1fsSTc, id é yMLzB1fsSTc.

Como já conhecemos o resto da url e não precisamos dela, então salvamos só o id do vídeo, isso também nos permite criarmos uma miniatura do vídeo na listagem.

Agora que já temos o cadastro pronto, vamos para listagem dos vídeos cadastrados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<ul id="video-list">        
  <?php foreach($pdo->query('SELECT * FROM videos ORDER BY id DESC') as $c): ?>
    <li>
      <p>
        <strong>
          <?php echo $c['title']; ?>
        </strong>
      </p>
      <a title="<?php echo $c['title'] ?>" href="http://www.youtube.com/embed/<?php echo $c['video_id'] ?>?rel=0&amp;wmode=transparent">
        <img src="http://i1.ytimg.com/vi/<?php echo $c['video_id'] ?>/default.jpg" alt="<?php echo $c['title']; ?>" />
      </a>

      <a onclick="return confirm('Deseja mesmo excluir esse vídeo?')" href="delete.php?id=<?php echo base64_encode($c['id']); ?>">
        Excluir
      </a>
    </li>
  <?php endforeach; ?>
</ul>
Incluímos a miniatura do vídeo (tag img) dentro de um link pois usamos o atributo href desse para exibir o vídeo em uma lightbox quando clicamos sobre a imagem (caso tenha dúvida recomendo que baixe o código completo e veja funcionando).

Veja a linha 10, o YouTube nos fornece um endereço para capturarmos uma imagem de um trecho do vídeo, para isso precisamos passar apenas o id do vídeo em uma url como essa http://i1.ytimg.com/vi/yMLzB1fsSTc/default.jpg (id yMLzB1fsSTc) e teremos a miniatura em imagem.

O código acima também possui um link para excluir o vídeo, ele simplesmente nos manda para a página delete.php passando o id do registro como parâmetro:

<?php
// Inclui o arquivo de conexão com banco de dados
include_once 'database.php';

// Verifica se é uma requisão do tipo GET
if($_SERVER['REQUEST_METHOD'] == 'GET'){
  $get = $_GET;

  /* Verifica se veio o id do registro pela url e se tem um valor definido
   * Obs: função base64_decode decodifica uma string, é o inverso de base64_encode usada por segurança
   */
  if(isset($get['id']) && base64_decode($get['id'])){
    // Executa query responsável por remover o registro
    $delete = $pdo->exec('DELETE FROM videos WHERE id = '. base64_decode($get['id']));

    // Verifica se o registro foi removido com sucesso
    if($delete){
      // Definimos a mensagem de sucesso
      $_SESSION['message'] = 'Vídeo excluido com sucesso';
    }else{
      // Definimos a mensagem de erro
      $_SESSION['message'] = 'Falha ao excluir vídeo';
    }
  }else{
    // Definimos a mensagem de erro
    $_SESSION['message'] = 'Falha ao excluir vídeo';
  }
}

// Redirecionamos para a página inicial
header('Location: index.php');
?>

É só isso! Agora já temos um cadastro de vídeos do YouTube.. Vocês podem conferir o código desse exemplo completo em meu GitHub.

O que vocês acharam, simples não?

Até mais.

Written on August 11, 2012

Share: