Perl es un poco cabrón, para los novatos como yo, pero tiene cosas guapas guapas. Un ejemplo WWW:Mechanize para hacer scripts que 'interactuen' con paginas web. Aquí pongo un script que se logea a una pagina web y se baja un informe que después pasea para incrustarlo en una wiki (dokuwiki), ademas como tengo varios centros, hago que el script solicite el informe para cada centro.
Hay que tener presente que:
Hay que tener presente que:
- Tuve que analizar un poco el codigo javascript que tiene la web para conocer el enlace final del informe que necesitaba (u otra forma de hacerlo es con un navegador tradicional solicitar el informe mientras tienes un tcpdump -X o wireshark corriendo para ver que url solicita el navegador).
- Tengo la suerte que la web tiene la opcion de descargar el informe en formato tabla de calculo, aunque realmente es un texto con campos delimitados por tabuladores
#!/usr/bin/env perl use strict; use warnings; use WWW::Mechanize; my $m = WWW::Mechanize->new( autocheck => 1 ); my %hotels = ( ACV => "intern code from web", HCB => "intern code from web", HCG => "intern code from web", HCM => "intern code from web", HCV => "intern code from web"); my $centre; my $wikifile="/home/wiki/data/pages/.../wiki-page.txt"; my $year; # parser cap a dokuwiki sub wiki { open(OUT, ">>", $wikifile); # pillar contenido web y parsear my $web = shift; my $centre = shift; $web =~ s/\x00//g; $web =~ s/\xff//g; $web =~ s/\xfe//g; $web =~ s/\t/\ \ \|\ \ /g; $web =~ s/\x09/\ /g; my @array = split('\n', $web); # 1era linea = cabeçera, quiero los mios shift @array; print OUT "\n===== $centre =====\n\n"; print OUT "^ MES ^ RESERVAS ^ HABS/NITS ^ AVG. NITS ^ ANTELACIO ^ PREU MIG ^ EUROS ^ EUR EXTRA ^ TOTAL ^ . ^ . ^\n"; foreach (@array) { print OUT "| $_ |"; print OUT "\n"; } close(OUT); } # Año actual (undef,undef,undef,undef,undef, $year,undef,undef,undef) = localtime(time); $year += 1900; #eliminamos archivo wiki anterior unlink $wikifile; # Auth $m->get('https://paginaweb/login.jsp'); $m->form_id('login'); $m->field('username', 'usuario'); $m->field('password', 'password'); $m->submit(); # per cada centro foreach (keys %hotels) { # canvio de centro via formulario de la web $m->get('http://pagina web/reports.jsp'); $m->form_name('change_hotel'); $m->select('h_g_id', $hotels{$_}); $m->field('change_hotel','true'); $m->submit(); # Pillo el centro actual del titulo de la web #$centre = $m->content(); #$centre =~ /\<title\>(.*?)\|(.*?)\<\/title\>/; #print $1 ." \n"; # pillo el informe y lo meto en la wiki $m->get("http://paginaweb/blabla/reportxls.jsp?report=blablabla"); wiki ($m->content(), $_); } # user y group = www-data chown 33, 33, $wikifile;
Comentarios