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