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: