#!/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"; }