Blog

Conoce todos los contenidos de mi web y cuéntame tus dudas o impresiones en los comentarios de las entradas.

Cómo descargar el thumbnail de Youtube o Vimeo con PHP

Cómo descargar el thumbnail de Youtube o Vimeo con PHP

En esta entrada hablaremos sobre la manera de realizar un script con PHP para descargar las thumbnail o minutaras de los vídeos de Youtube o de Vimeo.

El objetivo de este script es la obtención de los thumbnail de una serie de vídeos que tenemos almacenados dentro de un archivo csv. Dentro de este archivo contamos con una columna donde se almacenan los enlaces de Youtube y Vimeo.

1. El primero paso que vamos a realizar es la creación de una carpeta, si esta no existe aún, para almacenar las imágenes de los vídeos.

$carpeta='nombre-carpeta';
if (!file_exists($carpeta)) {
     mkdir($carpeta, 0777, true);
}

Con la función file_exists comprobamos si la carpeta que queremos crear existe, y si no es el caso creamos dicho directorio con la función mkdir.

2. El siguiente paso que realizaremos es la obtención de la columna donde se encuentran los enlaces de los vídeos.

$fp = fopen ("archivo.csv","r");
while ($data = fgetcsv ($fp, 1000, ";")) {
     $video = $data[1];
     //…
}

Para ellos abrimos el archivo, en este caso se llama archivo.csv en modo lectura, y lo recorremos con un loop while para obtener la información de la segunda columna como podemos ver en el código. En la segunda columna es donde están almacenados los enlaces.

3. En el tercer paso, diferenciaremos entre los enlaces de Youtube y los enlaces de Vimeo mediante un condicional y comprobando si dentro de la cadena existe la palabra que la diferencia con la función strpos.

if(strpos($video, 'youtube') !== false){

    //Código de descarga de los vídeos de Youtube

}else if(strpos($video, 'vimeo') !== false){

    //Código de descarga de los vídeos de Vimeo

}

4. Ahora nos centraremos en la descarga de las imágenes de Youtube.

$enlace = explode("v=", $video);
$codigo = substr($enlace[1], 0, 11);

$img = file_get_contents('http://img.youtube.com/vi/'.$codigo.'/maxresdefault.jpg');
file_put_contents('nombre-carpeta/' . $codigo . '.jpg', $img);

Para ello objetemos el código del enlace. Esto lo realizamos con la función explode, donde separamos la cadena en dos elementos. Nos quedaremos con el segundo elemento y cogeremos los 11 primeros caracteres (código del vídeo) gracias a la función substr.

Con la función file_get_contents transmitimos la imagen de Youtube a una cadena. Según la calidad de la imagen que quieras descargar utilizaras el siguiente link:

  • Calidad Standard: http://img.youtube.com/vi/ video-id/sddefault.jpg
  • Calidad Media: http://img.youtube.com/vi/ video-id/mqdefault.jpg
  • Calidad Alta: http://img.youtube.com/vi/ video-id/hqdefault.jpg
  • Máxima Calidad: http://img.youtube.com/vi/ video-id/maxresdefault.jpg

Y con la función file_put_contents guardamos la imagen con el nombre del Id del vídeo en la carpeta que creamos en el primer paso como vemos en el código.

5. En el siguiente paso realizaremos el mismo procedimiento que en el anterior paso pero esta vez con los vídeos de Vimeo.

$codigo = explode("/", $video)[3];
$hash = unserialize(file_get_contents("http://vimeo.com/api/v2/video/".$codigo.".php"));
$imgen = $hash[0]['thumbnail_large'];

$img = file_get_contents($imgen);
file_put_contents('nombre-carpeta/' . $codigo . ".jpg", $img);

Realizamos la obtención del código del vídeo mediante un explode. Y sacamos la imagen mediante la API que nos proporciona Vimeo. En esta ocasión también podemos obtener distintas calidades de imágenes:

  • Thumbnail pequeña: $hash[0][‘ thumbnail_small’]
  • Thumbnail mediana: $hash[0][‘ thumbnail_medium’]
  • Thumbnail grande: $hash[0][‘ thumbnail_large’]

Y realizamos lo mismo que con los vídeo de Youtube, guardamos la imagen con el nombre del Id del vídeo en la carpeta.

Una vez ejecutemos este script podremos comprobar como dentro de nuestra carpeta tenemos todas las imágenes de los vídeos.

Aquí tenéis el código completo que hemos ido explicando y desglosando a lo largo del artículo.

//Creamos la carpeta donde guardaremos las imagenes
$carpeta = 'nombre-carpeta';
if (!file_exists($carpeta)) {
    mkdir($carpeta, 0777, true);
}

//Leemos el csv para obtener los datos que necesitamos
$fp = fopen ("archivo.csv","r");
while ($data = fgetcsv ($fp, 1000, ";")) {
	
   //Obtenemos la columna de los enlaces del vídeo
    $video = $data[1];
	
   //Si es un vídeo de Youtube
   if(strpos($video, 'youtube') !== false){
		
       //Descagamos el vídeo de Youtube 
       $enlace = explode("v=", $video);
       $codigo = substr($enlace[1], 0, 11);
		
       $img = file_get_contents('http://img.youtube.com/vi/'. $codigo . '/maxresdefault.jpg');
       file_put_contents('nombre-carpeta/' . $codigo . '.jpg', $img);
	
    //Si es un vídeo de Vimeo
    }else if(strpos($video, 'vimeo') !== false){
		
        //Descagamos el vídeo de Vimeo
	$codigo = explode("/", $video)[3];
	$hash = unserialize(file_get_contents("http://vimeo.com/api/v2/video/".$codigo.".php"));
	$imgen = $hash[0]['thumbnail_large'];
		
	$img = file_get_contents($imgen);
	file_put_contents('nombre-carpeta/' . $codigo . ".jpg", $img);
		
    }
	
}

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio