#!/usr/bin/perl
use strict;
use Time::Local;
use LWP::Simple;
my $content = get("http://perlmonks.org/?node_id=3559;displaytype=raw");
my ($maxLVL,$maxtime,$maxwrt,$now,%monk);
my @lvls = (0..12,30,40,54,70,90,120,160,220,300,400,500,600,700,800,900,1000);
my %time = (
sec => 1,
hour => 3600,
day => 86400,
week => 86400*7,
year => 86400*365,
);
$now = time;
for(split /\r?\n/,$content) {
next unless /
]*>| ]*>\d+ | ]+>([^<]+) | ]*>(\d+) | \w+ \((\d+)\) | ]*>]+>(\w+) | ]*>([^<]+) | ]*>([^>]+) |
!;
$writeups = 0 if $writeups =~ /None/;
my @l = reverse split /-/,$since;
$l[1]--;
$since = timelocal(0,0,0,@l);
@l = split/\s+/,$last_here;
$l[1] =~ s/s$//;
$last_here = $now - $l[0] * $time{$l[1]};
my $monktime = $last_here - $since;
$monk{$id} = [
$XP,
$writeups,
$monktime # to sort for "longest time here"
];
}
foreach my $n (0..2) {
my $c=0;
# swap $a and $b for reverse sorting, i.e. for "dark vroom"
$monk{$_}->[$n+3] = $c++ for sort {$monk{$a}->[$n]<=>$monk{$b}->[$n]} keys %monk;
}
my $m = scalar keys %monk;
foreach my $id(sort {$monk{$b}->[1]<=>$monk{$a}->[1]}keys %monk) {
my ($x,$w,$t) = map { int($monk{$id}->[$_] / $m * 256) } 3,4,5;
for($x,$w,$t) { $_ = 255 if $_ > 255 }
my($r,$g,$b) = ($x,$w,$t); # change here to say e.g. XP => green
my $col = sprintf"#%02x%02x%02x",$r,$g,$b;
$col .= "; color: white" if (3*$r + 2*$g + 1*$b )/6 < 128;
print "*[class\$=\"$id\"], *[class\$=\"$id\"] *, *[class\$=\"$id\"] *:link, *[class\$=\"$id\"] *:visited { background: $col; }\n";
}