• Publicidad

Automatizar una descarga de lotes de archivos

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Automatizar una descarga de lotes de archivos

Notapor MARKO » 2016-10-10 19:28 @853

Hola, Perl en Español. Quisiera saber si me pueden orientar en cómo poder automatizar la descarga de lotes de archivos.

http://www.amm.org.gt/pdfs2/post_despac ... _DICIEMBRE
http://www.amm.org.gt/pdfs2/post_despac ... 10_OCTUBRE

la cual contiene archivos correspondientes a cada día (como se ve en la imagen adjunta) y pues cuando se pulsa en el nombre del archivo inmediatamente se presenta la opción de descargarlo.

Lo que pretendo es bajar lotes de archivos de varios meses, varios años, y pues quisiera saber qué idea me dan para automatizarlo.

El fin primordial sería darle al script el rango de fechas (año, mes, ya que con esto se maneja a qué página me dirijo y los nombres de los archivos .zip que se bajarán) que contienen los archivos y una ubicación para descargar y que el programa se encargue de entrar a las páginas y baje el total de archivos contenidos.

De antemano, gracias por la ayuda.
Adjuntos
listado de archivos.JPG
listado de archivos.JPG (42.88 KiB) Visto 1625 veces
MARKO
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2012-01-10 22:34 @982

Publicidad

Re: Automatizar una descarga de lotes de archivos

Notapor explorer » 2016-10-11 18:19 @805

Bueno, necesitas un par de bucles para recorrer los años y los meses. Y un hash para traducir de nombre de mes a número de mes.

Los archivos a bajar tienen nombres predecibles, así que no necesitas técnicas de rascado web para sacar los enlaces. Con LWP::Simple debería ser sencillo bajar los que quieras.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Automatizar una descarga de lotes de archivos

Notapor MARKO » 2016-10-12 15:10 @674

Gracias por el truci. Gracias al mismo, logré hacer este script y funciona de maravilla.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use strict;
  3. use LWP::Simple;
  4. use Date::Calc q(Days_in_Month);
  5.  
  6. ##inicio
  7. my $anioini = '2007';
  8.  
  9. ##final
  10. my $aniofin = '2015';
  11.  
  12. my %meses = (
  13.     '01' => 'ENERO',
  14.     '02' => 'FEBRERO',
  15.     '03' => 'MARZO',
  16.     '04' => 'ABRIL',
  17.     '05' => 'MAYO',
  18.     '06' => 'JUNIO',
  19.     '07' => 'JULIO',
  20.     '08' => 'AGOSTO',
  21.     '09' => 'SEPTIEMBRE',
  22.     '10' => 'OCTUBRE',
  23.     '11' => 'NOVIEMBRE',
  24.     '12' => 'DICIEMBRE'
  25. );
  26.  
  27. for my $anio ( $anioini .. $aniofin ) {
  28.  
  29.     foreach my $mes ( sort { $a <=> $b } keys %meses ) {
  30.  
  31.         my $dias_mes = Days_in_Month( $anio, $mes );
  32.  
  33.         foreach my $dia ( 01 .. $dias_mes ) {
  34.  
  35.             $dia = '0' . $dia if $dia < 10;
  36.  
  37.             my $url = 'http://www.amm.org.gt/pdfs2/post_despacho/POSDESPACHO_DIARIO/'.$anio.'/'.$mes.'_'.$meses{$mes}.'/PD'.$anio.$mes.$dia.'.zip';
  38.  
  39.             my $archivo = 'PD' . $anio . $mes . $dia . '.zip';
  40.  
  41.             getstore( $url, $archivo );
  42.         }
  43.  
  44.     }
  45. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2016-10-12 16:16 @719, editado 2 veces en total
Razón: Formateado de código con Perltidy
MARKO
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2012-01-10 22:34 @982

Re: Automatizar una descarga de lotes de archivos

Notapor explorer » 2016-10-12 16:28 @728

Enhorabuena.

Solo unos detalles extra...

Cambiando la línea 33 de

foreach my $dia ( 01 .. $dias_mes ) {
a
foreach my $dia ( '01' .. $dias_mes ) {

(entrecomillar el número) te ahorras la línea 35.

Otro detalle es a la hora de componer cadenas de caracteres. Las comillas simples respetan todo lo que pongamos dentro, mientras que las dobles harán una interpolación. Eso quiere decir que si dentro ponemos variables, las interpolará a su valor actual.

Así, las líneas 37 y 39 se pueden reescribir así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.             my $url = "http://www.amm.org.gt/pdfs2/post_despacho/POSDESPACHO_DIARIO/$anio/${mes}_$meses{$mes}/PD$anio$mes$dia.zip";
  2.  
  3.             my $archivo = "PD$anio$mes$dia.zip";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Lo único que hay que tener cuidado es saber la sintaxis que requiere Perl para los nombres de las variables. En resumen: letras, números y el carácter '_'. Todo lo demás es ignorado. Por eso podemos mezclar variables con texto normal, en las líneas anteriores. Ahora bien... tendríamos un problema porque la variable $mes va seguida de un '_' y Perl creería que nos referimos a la variable '$mes_'. Por eso está metida entre llaves, para aislar del '_' que le sigue. Y también podemos poner sin problemas '$meses{$mes}', porque, para Perl, si "algo" se parece a un elemento de un hash, es que debe ser eso, y lo trata tal cual.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Automatizar una descarga de lotes de archivos

Notapor MARKO » 2016-10-12 16:36 @733

Gracias, explorer. Como siempre, muy buenos aportes.
MARKO
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2012-01-10 22:34 @982


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 2 invitados