use strict;
use warnings;
use LWP::UserAgent;
use HTML::TreeBuilder;
my $ua = LWP::UserAgent->new();
$ua->agent("MyApp/0.1");
my $req = HTTP::Request->new(GET => 'http://perlmonks.org/?node=Saints%20in%20our%20Book');
my $res = $ua->request($req);
unless($res->is_success) {
die $res->status_line;
}
my $tree = HTML::TreeBuilder->new();
$tree->parse($res->content);
$tree->eof();
print <<'EOF' ;
EOF
sub dump_saints {
my $element = shift;
if($element->tag() eq 'table') {
my @contents = $element->content_list;
if(@contents > 10) { # The saints table has lots of rows
my %saints;
shift(@contents); # The first row is headers
foreach my $row (@contents) {
my ($id) = (((($row->content_list())[1]->content_list())[0]->content_list())[0]->attr('href') =~ m/=(.*)/);
my ($level) = ((($row->content_list())[3]->content_list())[0] =~ m/([^ ]*)/);
push(@{$saints{$level}}, $id);
}
foreach my $level (keys %saints) {
print "var $level = [" . join(',',@{$saints{$level}}) . "];\nfor( var i=$level.length-1; i>=0; i--) SaintsBook[$level\[i]] = '$level';\n\n";
}
}
}
foreach my $e ($element->content_list()) {
if(ref($e) and $e->isa('HTML::Element')) {
dump_saints($e);
}
}
}