Capturando imagens de um vídeo do YouTube ou Vimeo com o PHP

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

Adaptado do original: http://darcyclarke.me/development/get-image-for-youtube-or-vimeo-videos-from-url/

Prefácio

Quando se está construindo uma aplicação social é sempre uma boa ideia incluir informações relevantes ao contexto. Isso ajuda a melhorar a experiência e torna tudo muito mais legal para o usuário.

Alguns projetos podem necessitar de uma ‘screenshot’ de algum vídeo. Isso é fácil de fazer e deixa seu site mais atraente para o usuário.
Com um script bem simples é possível obter a thumbnail de um vídeo do YouTube ou Vimeo através da URL.

Logo abaixo você vê o snippet que pode ser utilizado em qualquer uma de suas aplicações.

[php]function video_imagem($url){
$url_imagem = parse_url($url);
if($url_imagem[‘host’] == ‘www.youtube.com’ || $url_imagem[‘host’] == ‘youtube.com’){
$array = explode("&", $url_imagem[‘query’]);
return "http://img.youtube.com/vi/".substr($array[0], 2)."/0.jpg";
} else if($url_imagem[‘host’] == ‘www.vimeo.com’ || $url_imagem[‘host’] == ‘vimeo.com’){
$hash = unserialize(file_get_contents("http://vimeo.com/api/v2/video/".substr($url_imagem[‘path’], 1).".php"));
return $hash[0]["thumbnail_small"];
}
}[/php]

Você vai perceber que esse código possui um trecho determinar se a url passada pela função é de um vídeo do YouTube ou Vimeo e os cálculos necessários para trabalhar com ambos.

Seria interessante que você adicionasse uma contenção, caso o link não seja válido.

Para o YouTube

Você pode mudar a seguinte linha no script para retornar um tamanho diferente de imagem.

[php]return "http://img.youtube.com/vi/".substr($array[0], 2)."/0.jpg";[/php]

Existem variações de thumbnail disponíveis baseado nas miniaturas escolhidas pelo usuário quando enviou o vídeo. Você pode mudar o número para conseguir uma thumb diferente. Incrementando o número no final da imagem, você verá a próxima thumb disponível.

[php]return "http://img.youtube.com/vi/".substr($array[0], 2)."/default.jpg"; // Pequena – padrão
return "http://img.youtube.com/vi/".substr($array[0], 2)."/0.jpg"; // Grande – padrão
return "http://img.youtube.com/vi/".substr($array[0], 2)."/1.jpg";
return "http://img.youtube.com/vi/".substr($array[0], 2)."/2.jpg";
return "http://img.youtube.com/vi/".substr($array[0], 2)."/3.jpg";[/php]

Para o Vimeo

Você pode alterar a seguinte linha no script para retornar um tamanho de imagem diferente do Vimeo:

[php]return $hash[0]["thumbnail_small"];[/php]

As variações são:

[php]return $hash[0]["thumbnail_small"];
return $hash[0]["thumbnail_medium"];
return $hash[0]["thumbnail_large"];[/php]

Conclusão

As APIs de YouTube e Vimeo possuem muito mais informações que você pode capturar, incluindo o avatar de usuários e outras coisinhas bacanas. Tomara que esse pequeno script ajude a trazer um contexto mais bacana para os seus usuários ao invés de um simples link estático.