Obter miniaturas de imagem de um vídeo do YouTube usando PHP
O Google padroniza suas URLs e com isso é possível gerar muita coisa dinâmica, e uma delas é as miniaturas de imagem de um vídeo do YouTube.
Para criar o código que gera a URL das imagens é preciso descobrir qual é o link padrão das imagens
, com uma pesquisada rápida no código fonte do site do YouTube pude notar que existem 4 possibilidades de servidores para as miniaturas:
http://i1.ytimg.com/vi/R4NLeQLlScE/default.jpg
http://i2.ytimg.com/vi/R4NLeQLlScE/default.jpg
http://i3.ytimg.com/vi/R4NLeQLlScE/default.jpg
http://i4.ytimg.com/vi/R4NLeQLlScE/default.jpg
Para cada servidor temos 4 possibilidades de imagens diferentes
http://i1.ytimg.com/vi/R4NLeQLlScE/default.jpg
http://i1.ytimg.com/vi/R4NLeQLlScE/0.jpg
http://i1.ytimg.com/vi/R4NLeQLlScE/1.jpg
http://i1.ytimg.com/vi/R4NLeQLlScE/2.jpg
http://i1.ytimg.com/vi/R4NLeQLlScE/3.jpg
Como podem notar, temos 4 servidores diferentes com 5 links para imagens, onde são quatro imagens diferentes, e uma é a escolhida como padrão pelo autor do video.
Traduzindo, de variavel temos o servidor, o qual irá alterar o numero do subdomínio: i1, i2, i3, i4, e a imagen que podem ser 0.jpg 1.jpg, 2.jpg, 3.jpg e default.jpg para a imagem padrão, a ultima variavel é o codigo do vídeo que está entre entre vi/ e a imagem.
Para as imagens um pouco maiores encontrei apenas um servidor com as 5 opções de imagens: http://img.youtube.com/vi/R4NLeQLlScE/0.jpg
Onde o parâmetro depois da barra segue o padrão citado para as imagens menores.
Basta achar o código do vídeo, que é o que está depois de v= que no nosso caso é o R4NLeQLlScE, apenas cuidado ao pegar esse codigo porque ele irá finalizar com o simbolo &, veja na nossa URL onde o código ficaria:
http://www.youtube.com/watch?v=R4NLeQLlScE&list=UUMykmfJDKL1EVNgl4sdRNbQ&index=46
Agora o próximo passo seria inserir o código do vídeo na URL padrão de miniatura de vídeos como mostrado abaixo.
http://i1.ytimg.com/vi/R4NLeQLlScE/default.jpg
Bom, essa é teoria, vamos na pratica?
Suponho que esse código será usado para gerar varias miniaturas então o ideal é criar uma função para representar todo o codigo, afim de não ficar repetindo coisa desnecessária. Nossa função terá um nome bem sugestivo youtubeImage, algo importante que nossa função irá precisar é a URL do vídeo, então iremos adicionar o parâmetro $url na função youtubeImage, como temos duas opções de imagem uma grande e outra pequena, seria interessante adicionar o parâmetro $size para definir qual será o tamanho da imagem gerada, claro que esse pode ser um parametro opcional, e que por padrão ele irá vim pequena (valor será small)
1
2
3
4
5
function youtubeImage($url, $size = "small"){
//todo o código irá ficar aqui
}
Vamos pegar o código do do vídeo, existem várias maneiras de obter o código do vídeo, a que vamos usar aqui é a forma mais bruta, que é quebrando a URL até sobrar somente o código. Primeiro vamos quebrar a URL onde tiver o parâmetro v= afinal é ai que estará o nosso vídeo
1
$url = explode("v=",$url);
Para a URL que estava igual a:
1
http://www.youtube.com/watch?v=R4NLeQLlScE&list=UUMykmfJDKL1EVNgl4sdRNbQ&index=46
Irá ser gerado um array onde em $url[0] será:
1
http://www.youtube.com/watch?
E dentro de $url[1] terá:
1
R4NLeQLlScE&list=UUMykmfJDKL1EVNgl4sdRNbQ&index=46
O que nos importa é a segunda opção, porem como podem notar lá não tem outros dados além do que o código que precisamos, vamos quebrar esse texto onde termina o código.
1
$url = explode("&",$url[1]);
Pronto agora a função explode transformou aquele texto em vários pedacinhos, o código do vídeo deverá estar dentro do primeiro índice, portanto será $url[0];
De posse do código é a hora de verificar qual foi o tamanho que devemos gerar a imagem e montar a URL da mesma
1
$url = $size == "small" ? ("http://i1.ytimg.com/vi/" . $url[0] . "/default.jpg") : ("http://img.youtube.com/vi/" . $url[0] . "/0.jpg");
Outro passo não menos importante é a imagem
Como esse código estará dentro de uma função, devemos retornar a URL da imagem como mostrado abaixo:
1
return $url;
Quando quiser carregar uma miniatura de imagem do vídeo do youtube basta chamar a função e inserir a URL do vídeo igual ao exemplo abaixo:
1
youtubeImage("http://www.youtube.com/watch?v=R4NLeQLlScE&list=UUMykmfJDKL1EVNgl4sdRNbQ&index=46");
Claro que isso irá gerar apenas a URL da imagem, e você precisa montar o código HTML que irá mostrar a imagem no seu site como abaixo:
1
<img src="<?php echo youtubeImage("http://www.youtube.com/watch?v=R4NLeQLlScE&list=UUMykmfJDKL1EVNgl4sdRNbQ&index=46");?>;" alt="" />
Um exemplo com a mesma imagem só que agora gerando ela de tamanho um pouco maior.
1
<img src="<?php echo youtubeImage("http://www.youtube.com/watch?v=R4NLeQLlScE&list=UUMykmfJDKL1EVNgl4sdRNbQ&index=46", "big");?>;" alt="" />;
Segue código completo, com exemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-?php <br ?->function youtubeImage($url, $size = "small"){
$url = explode("v=",$url);
$url = explode("&",$url[1]);
$url = $size == "small" ? ("http://i1.ytimg.com/vi/" . $url[0] . "/default.jpg") : ("http://img.youtube.com/vi/" . $url[0] . "/0.jpg");
return $url; }
?>
<img src="<?php echo youtubeImage("http://www.youtube.com/watch?v=R4NLeQLlScE&list=UUMykmfJDKL1EVNgl4sdRNbQ&index=46");?>" alt="" />
<img src="<?php echo youtubeImage("http://www.youtube.com/watch?v=R4NLeQLlScE&list=UUMykmfJDKL1EVNgl4sdRNbQ&index=46", "big");?>" alt="" />
Veja nosso post mostrando como recuperar não só as imagens, como também outras informações do YouTube
Comentários, duvidas, sugestões e até mesmo criticas é só comentar