Introducción
Hay una historieta que se llama Calvin & Hobbes que me encanta, pues me parece muy buena.
Una vez navegando encontré un sitio que tenía el archivo con todas las historietas, me pareció genial así que decidi descargarlas por si en algun momento se salía de linea el sitio.
Quizá no lo sepan pero soy muy flojo, por lo que me dio mucha flojera estar cliqueando en cada imagen para guardarla en el disco, así que decidí hacer un pequeño programita en perl que descargará las imagenes al disco.
Primer Paso
Lo primero que hice fue entrar a CPAN y buscar algun módulo que me ayudara con el problema, y pues como es costumbre lo encontré fácilmente.
El módulo que vamos a usar para este tutorial, y para poder descargar las imagenes es el Image::Grab.
Descargando las imágenes
Como es lógica lo primero que tenemos que hacer es decirle a perl que queremos usar el módulo:
use Image::Grab;
El siguiente paso es crear un objeto con el módulo:
my $img = new Image::Grab;
Ahora si ya que tenemos nuestro objeto creado empezemos con lo bueno.
$img->url('http://www.sitio.com/imagen.jpg');
$img->grab;
En la primera linea estamos diciendole a nuestro objeto cual es el URL de la imagen que queremos descargar, y con la segunda linea le estamos diciendo que descarge la imagen.
El código de la imagen lo va a descargar en este caso a $img->image.
Lo que sigue es ver si la imagen fue descargada y guardarla en un archivo, de lo contrario vamos a desplegar un error.
if($img->image){
#Salvamos la imagen al disco
open(IMAGEN, ">img_descargada.jpg") || die"No se pudo crear archivo: $!";
binmode IMAGEN; #para derivados de MSDOS.
print IMAGEN $img->image;
close IMAGEN;
#EXITO
print "La imagen fue descargada con éxito\n";
}else{
print "NO EXISTE LA IMAGEN\n";
}
Listo ya tenemos el código para descargar imagenes de sitios en la web.
Código Final
#!/usr/bin/perl -w
use strict;
use Image::Grab;
my $img = new Image::Grab;
$img->url('http://www.sitio.com/imagen.jpg');
$img->grab;
if($img->image){
#Salvamos la imagen al disco
open(IMAGEN, ">img_descargada.jpg") || die"No se pudo
crear archivo: $!";
binmode IMAGEN; #para derivados de MSDOS.
print IMAGEN $img->image;
close IMAGEN;
#EXITO
print "La imagen fue descargada con éxito\n";
}else{
print "NO EXISTE LA IMAGEN\n";
}
exit(1);