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.

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"];
    }
}

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.

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

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.

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";

Para o Vimeo

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

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

As variações são:

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

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.