posters again

Vasilis Vasaitis vvas at hal.csd.auth.gr
Fri Feb 15 23:57:00 EET 2002


On Fri, Feb 15, 2002 at 05:14:48AM +0200, Nikos Mavroyanopoulos wrote:
> On Fri, Feb 15, 2002 at 02:51:43AM +0200, Steve Stavropoulos wrote:
> 
> > > YΓ. Μερικά πράγματα δεν αλλάζουν, o roryt είναι ακόμη πρώτος.
> >  Apo fortune cookie twn best-of-ricudis (by evris):
> Δεν χρειαζόταν, ήταν ήδη στο url που είχα στείλει. Δεν ξέρω
> γιατί αλλα μου είχε κολλήσει ότι ο Γιαννης ήταν πρώτος...
> 
> Oπως θα παρατηρήσατε το νέο sorting ήταν με βάση το e-mail, οπότε
> μερικοί αδικηθήκαν (ricudis, djart). Στην επόμενη πενταετία που θα
> ξαναστείλω στατιστικά το script θα κάνει και fuzzy match.

  Ποιος περιμένει μέχρι την επόμενη πενταετία; Νίκο, άμα θέλεις, αφού έχεις
τα δεδομένα, δοκίμασε πάνω τους το συνημμένο. Σε σχέση με το δικό σου έχει
μερικά πλεονεκτήματα:

  - Εκτός από το e-mail χρησιμοποιεί και το όνομα για να ενοποιήσει τα
μηνύματα ενός ατόμου, οπότε είναι κάπως πιο δίκαιο στα αποτελέσματά του.

  - Είναι απείρως πιο γρήγορο, αφού διαβάζει μόνο μια φορά το mailbox για να
βγάλει αποτελέσματα.

  - Στο code obfuscation σε πατάω κάτω. ;-)

  Για να δούμε τι θα βγει αυτή τη φορά...

-- 
Vasilis Vasaitis
vvas at hal.csd.auth.gr

"Don't do drugs. Santa Claus is watching."
		-- winamp.com


-------------- next part --------------
#!/usr/bin/perl -w

sub listcmp {
    $b->[0] <=> $a->[0];
}

die "usage: $0 mbox [mbox0 ...] htmlfile\n" unless @ARGV >= 2;
$HTMLFILE = ">" . pop @ARGV;

$posters[0] = [0, [], []];

while (<>) {
    $head = 1, $msgcount++ if /^From /;
    next unless $head;
    chomp;
    $head = $_ ne "";
    if (s/^From:\s*//i) {
	$fromcount++;
	if (s/<([^>]*)>//) {
	    $address = $1;
	    s/^\s*\"?//;
	    s/\"?\s*$//;
	    $name = $_;
	}
	else {
	    $name = (s/\(([^\)]*)\)// ? $1 : "");
	    s/^\s*\"?//;
	    s/\"?\s*$//;
	    $address = $_;
	}
	$index = $addresses{$address} || $names{$name} || @posters;
	$posters[$index] = [0, [], []] if $index == @posters;
	$posters[$index][0]++;
	if ($address && !grep { $address eq $_ } @{$posters[$index][1]}) {
	    push @{$posters[$index][1]}, $address;
	    $addresses{$address} = $index;
	}
	if ($name && !grep { $name eq $_ } @{$posters[$index][2]}) {
	    push @{$posters[$index][2]}, $name;
	    $names{$name} = $index;
	}
    }
    elsif (s/^(X-Mailer|User-Agent):\s*//i) {
	$muacount++;
	s/,?[\/\[\( ]+((version|build) )?v?\d.*//i;
	$mailers{$_}++;
    }
}

print "Total messages processed: $msgcount\n";
print "Total From: headers found: $fromcount\n";
print "Total X-Mailer: / User-Agent: headers found: $muacount\n";

foreach (keys %mailers) {
    push @mailers, [$mailers{$_}, $_];
}

open HTMLFILE or die "could not open $HTMLFILE\n";
print HTMLFILE "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">";
print HTMLFILE "<html>\n  <head>\n";
print HTMLFILE "    <title>Greatest posters ever</title>\n";
print HTMLFILE "    <style type=\"text/css\">\n";
print HTMLFILE "      td { border: solid gray 1px; padding: 0.5em }\n";
print HTMLFILE "    </style>\n  <head>\n";
print HTMLFILE "  <body>\n    <h2>Best writers</h2>\n    <table>\n";
$count = 1;
foreach (sort listcmp @posters) {
    print HTMLFILE "      <tr>\n\t<td>${count}.</td>\n\t<td>$$_[0]</td>\n";
    print HTMLFILE "\t<td>", (join "<br>", @{$$_[1]}), "</td>\n";
    print HTMLFILE "      </tr>\n";
    last if $count++ == 20;
}
print HTMLFILE "    </table>\n    <h2>Best MUAs</h2>\n    <table>\n";
$count = 1;
foreach (sort listcmp @mailers) {
    print HTMLFILE "      <tr>\n\t<td>${count}.</td>\n\t<td>$$_[0]</td>\n";
    print HTMLFILE "\t<td>$$_[1]</td>\n      </tr>\n";
    last if $count++ == 10;
}
print HTMLFILE "    </table>\n  </body>\n</html>\n";
close HTMLFILE;


More information about the Linux-greek-users mailing list