From f962ebcf7e6a04040199d16556bbae492856e20a Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Thu, 20 May 2010 20:17:23 +0200 Subject: Add basic image download. Tested & working with XKCD and explosm --- bin/comirror | 50 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/bin/comirror b/bin/comirror index 7f65745..1239741 100755 --- a/bin/comirror +++ b/bin/comirror @@ -9,6 +9,15 @@ my $mech = WWW::Mechanize->new( stack_depth => 0, ); +my $uri = shift || read_file('last_uri'); +my $image_re = read_file('image_re'); + +if (not defined $uri or not defined $image_re) { + die("last_uri or image_re not found / specified\n"); +} + +$image_re = qr{$image_re}; + sub find_next_link { foreach my $re ( qr{ ^ next $ }ix, @@ -23,6 +32,34 @@ sub find_next_link { die("Cannot find next link\n"); } +sub find_image { + my $image = $mech->find_image(url_abs_regex => $image_re); + + if ($image) { + my $tmpmech = WWW::Mechanize->new(); + $tmpmech->get($image->url_abs); + return $tmpmech; + } + return; +} + +sub get_image { + my $tmpmech = find_image() or return; + my $filename = (split(qr{/}o, $tmpmech->uri->as_string))[-1]; + + if (-e $filename) { + say "img: $filename (skipped)"; + } + else { + say "img: $filename"; + open(my $fh, '>', $filename) or die("Cannot open $filename: $!\n"); + print {$fh} $tmpmech->content(); + close($fh) or die("Cannot close $filename: $!\n"); + } + + return; +} + sub read_file { my ($filename) = @_; my ($line, $fh); @@ -46,13 +83,6 @@ sub save_lasturi { return; } -my $uri = shift || read_file('last_uri'); -my $image_re = read_file('image_re'); - -if (not defined $uri or not defined $image_re) { - die("last_uri or image_re not found / specified\n"); -} - $SIG{INT} = sub { save_lasturi(); exit(0); @@ -64,8 +94,9 @@ while ( and $mech->status() == 200 ) { - say $mech->uri->as_string; - say $uri; + say "URI: $uri"; + + get_image; $uri = find_next_link->URI->abs->as_string; @@ -74,6 +105,7 @@ while ( die("Looks like we're in a loop, bailing out\n"); } + print "\n"; sleep(1); } -- cgit v1.2.3