Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Descargar muchas imágenes

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Dom Jul 27, 2008 9:34 am
lis
Perlero Nuevo
Perlero Nuevo
Registrado: 27 May 2008
Mensajes: 29
Descargar muchas imágenes Responder citando

Hola a todos, tengo el siguiente script:

Perl:
#!/usr/bin/perl -w

use strict;
use Image::Grab;

my $img = new Image::Grab;
$img->url('http://www.ncdc.noaa.gov/gibbs/image/GOE-12/IR/2004-01-01-00');
$img->grab;

#Salvamos la imagen al disco
open(IMAGEN, ">2004-01-01-00.jpg") || die"No se pudo crear archivo: $!";
print IMAGEN $img->image;
close IMAGEN;


Esto está bien ya que me descarga la imagen, pero yo quiero descargar las imágenes de un año entero, y hago un ciclo for y no me reconoce nada.

Si tienen alguna sugerencia se los agradezco mucho.
Mensaje Dom Jul 27, 2008 10:15 am
lis
Perlero Nuevo
Perlero Nuevo
Registrado: 27 May 2008
Mensajes: 29
Responder citando

Hola. También tengo este script:

Perl:
#!/usr/bin/perl -w

#ENERO
if ($mes=1) {
    for ($dia=1;$dia<=9;$dia++) {
        for ($hora=0; $hora<=9; $hora=$hora+3) {
            my $content =`wget  http://www.ncdc.noaa.gov/gibbs/image/GOE-12/IR/2004-0$mes-0$dia-0$hora`;
        }
    }

    for ($dia=10;$dia<=31;$dia++) {
        for ($hora=0; $hora<=9; $hora=$hora+3) {
            {
                my $content =`wget  http://www.ncdc.noaa.gov/gibbs/image/GOE-12/IR/2004-0$mes-$dia-0$hora`;
            }
        }
    }

    system "(mv 2004-0$mes* 0$mes)";


Es mucho más largo pero solo a modo de ejemplo, solo copié para el mes de enero. Este script me descarga las imágenes y las puedo ver. El problema es que me las baja sin formato (ya sea .jpg o .jpeg).

Ayúdenme, por favor y muchas gracias.
Mensaje Dom Jul 27, 2008 1:52 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
Responder citando

Yo veo varios problemas:
* El primer if está mal. No estás haciendo una comparación, sino una asignación, por lo que siempre se ejecutará $mes = 1
* Me sobra una llave de apertura y una llave de cierre

Otros detalles:
* Si usas Perl como si fuera un script shell, casi mejor usa un script shell.

En cuanto al programa, se puede simplificar mucho, ya que las direcciones a las imágenes son fácilmente reproducibles.

Esta es mi solución:
Perl:
#!/usr/bin/perl
#
# Descripción:
#   Bajar las imágenes de infrarojo del satélite GOES
#   para un año determinado, desde la web de NOAA.
#   Se añade la extensión '.jpg' a los ficheros bajados.
#   Antes de bajar un fichero, se comprueba que no haya sido bajado antes.
#
# Argumentos
#   El año se pasa como primer argumento.
#
# Joaquín Ferrero, julio 2008.
#

use LWP::Simple;

use strict;
use warnings;

# Constantes
my $URL_BASE = 'http://www.ncdc.noaa.gov/gibbs/image/GOE-12/IR';
my $IMG_FMT  = '%04d-%02d-%02d-%02d';
$|++;

# Año de bajada
if ( !@ARGV ) {
    die "Uso: $0 <año a bajar>\n";
}
my $anno = $ARGV[0];
if ( $anno < 100 ) {
    $anno += 2000;
}

# Bajar los imágenes
foreach my $mes ( 1 .. 12 ) {

    foreach my $dia ( 1 .. 31 ) {

        foreach my $hora ( 0, 3, 6, 9, 12, 15, 18, 21 ) {

            my $imagen = sprintf $IMG_FMT, $anno, $mes, $dia, $hora;

            print "Bajando fichero $imagen... ";
            mirror( "$URL_BASE/$imagen", "$imagen.jpg" );
            print "Ok\n";
        }
    }
}
La salida es:
Código:
explorer@portatil:~/Documents/Desarrollo> ./ir_goes.pl
Uso: ./ir_goes.pl <año a bajar>
explorer@portatil:~/Documents/Desarrollo> ./ir_goes.pl 2004
Bajando fichero 2004-01-01-00...
Bajando fichero 2004-01-01-03...
Bajando fichero 2004-01-01-06...
Bajando fichero 2004-01-01-09...
Bajando fichero 2004-01-01-12...
Bajando fichero 2004-01-01-15...
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group