use strict;
use LWP::UserAgent;
use HTML::LinkExtor;
use URI::URL qw(url);
my $url = "http://kernel.org/pub/linux/kernel/v1.0/";
my $ua = LWP::UserAgent->new;
$ua->agent('pps 0.1.43');
my @links = ();
sub callback {
my ($tag, %attr) = @_;
return if $tag eq 'href';
push(@links, values %attr);
return (@links);
}
my $p = HTML::LinkExtor->new(\&callback);
my $res = $ua->request(
HTTP::Request->new(GET => $url),
sub {$p->parse($_[0])});
my $base = $res->base;
@links = map {$_ = url($_, $base)->abs;} @links;
my @krn = grep(/tar/, @links);
foreach my $krn (@krn) {
my @remote_files = HTTP::Request->new(HEAD=>$krn);
my $resp = $ua->request(@remote_files);
my $length = $resp->header('Content-Length');
my $bprecise = sprintf "%.0f", $length;
my $bsize = insert_commas($bprecise);
my $kprecise = sprintf "%.0f", ($length/1024);
my $ksize = insert_commas($kprecise);
my $archtype; # tarball? or bzip2? or zip?
my $krnhref = substr($krn, 48, 70);
if ($krn =~ /tar.gz/) {
$archtype = "tarball";
} elsif ($krn =~ /bz2/) {
$archtype = "bzip";
} else {
$archtype = "zip";
}
print "Path: $krn\nFile: $krnhref ";
print "($archtype) - ${ksize}kb, $bsize bytes\n\n";
}
sub insert_commas {
my $text = reverse $_[0];
$text =~ s/(\d{3})(?=\d)(?!\d*\.)/$1,/g;
return scalar reverse $text;
}