#!C:/Perl/bin use strict; use warnings; use Date::Calc qw /Today Delta_Days/; use LWP::Simple; use POSIX qw /strftime/; # umask 022 or die "Failed to set umask: 022\n"; #umask? Not on 'doze sub output; my $url = 'http://www.perlmonks.org/index.pl?node_id=3559&displaytype=print'; $_ = get $url or die "Failed to fetch '$url'\n"; my $target_dir = "c:/__wo_ww/"; # MODIFY TO SUIT YOUR NEEDS. was /tmp in Abigail-II's node, cited above my $xp_file = "$target_dir/xp.html"; my $arts_file = "$target_dir/arts.html"; my $days_file = "$target_dir/days.html"; my $xp_day_file = "$target_dir/xp_day.html"; my $xp_art_file = "$target_dir/xp_art.html"; my $art_day_file = "$target_dir/art_day.html"; my %data; while (m!]*> (\d+) ([^<]+) (\d+) (\w+) (\d+)-(\d+)-(\d+)!gx) { my ($pos, $name, $xp, $arts, $yr, $mon, $day) = ($1, $2, $3, $4, $5, $6, $7); $xp -= 1000000 if $name =~ /^vroom/; my $days = Delta_Days $yr, $mon, $day, Today; $data {$name} {xp} = $xp; $data {$name} {arts} = $arts =~ /None/ ? 0 : $arts; $data {$name} {days} = $days; $data {$name} {xp_day} = sprintf "%.2f" => $xp / $days; $data {$name} {xp_art} = $arts =~ /None/ ? "999999" : sprintf "%.2f" => $xp / $arts; $data {$name} {art_day} = $arts =~ /None/ ? 0 : sprintf "%.2f" => $arts / $days; } # Rank them. for my $field (qw /xp arts days xp_day xp_art art_day/) { my $new_field = "${field}_rank"; my $count = 0; foreach my $name (sort {$data {$b} {$field} <=> $data {$a} {$field}} keys %data) { $data {$name} {$new_field} = ++ $count; } } output "xp", $xp_file; output "arts", $arts_file; output "days", $days_file; output "xp_day", $xp_day_file; output "xp_art", $xp_art_file; output "art_day", $art_day_file; sub output { my ($key, $file) = @_; my @names = sort {$data {$b} {$key} <=> $data {$a} {$key}} keys %data; my $now = strftime "%e %B %Y", localtime; open my $fh => ">", $file or die "Failed to open $file: $!\n"; print $fh <<"--"; Pointless Perlmonks Saints Statistics Home Pointless stats

Pointless Perlmonks Saints Statistics

-- foreach my $name (@names) { print $fh ""; foreach my $key (qw /arts xp days xp_day xp_art art_day/) { my $rank = "${key}_rank"; print $fh "" . ""; } print $fh "\n"; } print $fh <<"--";
Name Articles XP Days XP per day XP per article Articles per day
$name$data{$name}{$key}($data{$name}{$rank})

Copyright 2003 by Abigail.
Page last modified: $now
Comments to: \$web\$\@abigail.nl
-- close $fh or die "Failed to close $file: $!\n"; }