Ergebnisse (mit Dump vom 6.2.2007):
- 366 Tage bis zur 200ten Bearbeitung
- 380 Tage bis zur 1000ten Bearbeitung
(Das bedeutet nicht, dass im Mittel nur 14 Tage von der 200ten bis zur 1000ten Bearbeitung benötigt werden, denn die meisten Benutzer, die 200 Bearbeitungen erreicht haben, haben (noch) keine 1000 Bearbeitungen erreicht.)
# !/usr/bin/perl
use Time::Local;
$bs = "Linux"; # oder "Windows"
$bots = "
* .anacondabot �$-1òî(Bot)
* AgentSpartiBot �$-1òî(Bot)
* AkaBot �$-1òî(Bot)
* AlnoktaBOT �$-1òî(Bot)
* ApeBot �$-1òî(Bot)
* ArchivBot �$-1òî(Bot)
* AsgardBot �$-1òî(Bot)
* BLUbot �$-1òî(Bot)
* BWBot �$-1òî(Bot)
* BetBot �$-1òî(Bot)
* Bocianski �$-1òî(Bot)
* Bot-Schafter �$-1òî(Bot)
* Bota47 �$-1òî(Bot)
* Botteler �$-1òî(Bot)
* Chlewbot �$-1òî(Bot)
* Chobot �$-1òî(Bot)
* ComillaBot �$-1òî(Bot)
* ConBot �$-1òî(Bot)
* CyeZBot �$-1òî(Bot)
* CyroBot �$-1òî(Bot)
* DHN-bot �$-1òî(Bot)
* DodekBot �$-1òî(Bot)
* DorganBot �$-1òî(Bot)
* EgonBOT �$-1òî(Bot)
* Erwin85Bot �$-1òî(Bot)
* Escarbot �$-1òî(Bot)
* Eskimbot �$-1òî(Bot)
* FANSTARbot �$-1òî(Bot)
* FlaBot �$-1òî(Bot)
* Flothi bot �$-1òî(Bot)
* Forrester-Bot �$-1òî(Bot)
* GGNBot �$-1òî(Bot)
* GeoBot �$-1òî(Bot)
* Gerakibot �$-1òî(Bot)
* Gpvosbot �$-1òî(Bot)
* HDBot �$-1òî(Bot)
* Harrobot �$-1òî(Bot)
* Heikobot �$-1òî(Bot)
* Hem-Kajk �$-1òî(Bot)
* Horst Fuchs �$-1òî(Bot)
* Idioma-bot �$-1òî(Bot)
* JAnDbot �$-1òî(Bot)
* K.J.Bot �$-1òî(Bot)
* KatBot �$-1òî(Bot)
* KocjoBot �$-1òî(Bot)
* KokoBot �$-1òî(Bot)
* Kyle the bot �$-1òî(Bot)
* L&K-Bot �$-1òî(Bot)
* LeonardoRob0t �$-1òî(Bot)
* LiBot �$-1òî(Bot)
* LugPaj-Bot �$-1òî(Bot)
* MalarzBOT �$-1òî(Bot)
* MediaWiki default �$-1òî(Bot)
* MelancholieBot �$-1òî(Bot)
* MoriBot �$-1òî(Bot)
* Obarskyr Bot �$-1òî(Bot)
* OlliBot �$-1òî(Bot)
* Perebot �$-1òî(Bot)
* PixelBot �$-1òî(Bot)
* PnBot �$-1òî(Bot)
* PortalBot �$-1òî(Bot)
* PyBot �$-1òî(Bot)
* QS-Bot �$-1òî(Bot)
* RCBot �$-1òî(Bot)
* RKBot �$-1òî(Bot)
* RebelRobot �$-1òî(Bot)
* RedBot �$-1òî(Bot)
* Rei-bot �$-1òî(Bot)
* RhodoBot �$-1òî(Bot)
* Riccardobot �$-1òî(Bot)
* Robbot �$-1òî(Bot)
* RoboServien �$-1òî(Bot)
* RobotE �$-1òî(Bot)
* RobotQuistnix �$-1òî(Bot)
* SashatoBot �$-1òî(Bot)
* Sebbot �$-1òî(Bot)
* SirBot �$-1òî(Bot)
* Sk-Bot �$-1òî(Bot)
* Slobot �$-1òî(Bot)
* Soulbot �$-1òî(Bot)
* SpBot �$-1òî(Bot)
* Superzerocool �$-1òî(Bot)
* TARBOT �$-1òî(Bot)
* Thijs!bot �$-1òî(Bot)
* TopBot �$-1òî(Bot)
* TottyBot �$-1òî(Bot)
* Tsca.bot �$-1òî(Bot)
* TuvicBot �$-1òî(Bot)
* Ugur Basak Bot �$-1òî(Bot)
* VBot �$-1òî(Bot)
* VolkovBot �$-1òî(Bot)
* Werdnabot �$-1òî(Bot)
* WinstonBot �$-1òî(Bot)
* YurikBot �$-1òî(Bot)
* Zwobot �$-1òî(Bot)
* Zyxwvut-Bot �$-1òî(Bot)
";
while($bots =~ /\* (.*) .*?\(.*?\)\n/g) {
$bo = $1;
$bo =~ s/ /_/g;
$bot{$bo} = 1;
}
$bot{"conversion_script"} = 1;
$bot{"Template_namespace_initialisation_script"} = 1;
$bot{"Kategobot"} = 1;
$bot{"Plattbot"} = 1;
$bot{"HotBot"} = 1;
$bot{"Newsbot"} = 1;
sub xmlunesc {
my $text = shift;
$text =~ s/</</sg;
$text =~ s/>/>/sg;
$text =~ s/'/'/sg;
$text =~ s/"/"/sg;
$text =~ s/&/&/sg;
$text;
}
sub xmlsiteinfo {
while($si =~ /<namespace key="(.*?)"(?: \/>|>(.*?)<\/namespace>)/sg) {
$namespace{$2} = $1 if defined $2;
}
}
sub erzeugeBga2 {
while(<>) {
$si .= $_;
if(/^\s*<\/siteinfo/) {
xmlsiteinfo();
last;
}
}
open OUT, ">bga1";
while(<>) {
if((!$inPage || !$nsOk) && /^\s*<page/) {
$inPage = 1;
$nsOk = 1;
next;
}
next unless $nsOk;
if($inRev) {
if(/^\s*<\/revision/) {
$user =~ s/ /_/g;
print OUT "$timestamp $user\n" unless defined $bot{$user};
$inRev = 0;
} elsif($inContributor && /^\s*<(username|ip)>(.*?)<\/\1>/) {
$user = xmlunesc($2);
} elsif(/^\s*<timestamp>(.*?)<\/timestamp/) {
$timestamp = $1;
} elsif(/^\s*<contributor>/) {
$inContributor = 1;
} elsif(/^\s*<\/contributor>/) {
$inContributor = 0;
} elsif(/^\s*<id>(.*?)<\/id>/ && !$inContributor) {
} else {
}
next;
}
if(/^\s*<revision/) {
$inRev = 1;
next;
}
if(/^\s*<\/page/) {
# last if $title eq "Aussagenlogik";
next;
}
if(/^\s*<title(?:.*?)>(.*?)<\/title>/) {
$title = xmlunesc($1);
if($title =~ /(.+?):(.+)/ && defined $namespace{$1}) {
$namespace = $namespace{$1};
} else {
$namespace = 0;
}
$title =~ s/\s/_/g;
# $nsOk = 0 if $namespace!=0;
# print "Titel: $title\n";
}
}
close OUT;
mkdir "sort-tmp" unless -d "sort-tmp";
sortiere("bga1", "bga2");
}
sub sortiere {
my $tmp = $ENV{"LC_ALL"};
$ENV{"LC_ALL"} = "C";
system "sort $_[0] /O $_[1]" if $bs eq "Windows";
system "sort -T ./sort-tmp -S 400M -o $_[1] $_[0]" if $bs eq "Linux";
$ENV{"LC_ALL"} = $tmp;
unlink $_[0];
}
sub zeit {
my $timestamp = shift;
$timestamp =~ /^(....)-(..)-(..)T(..):(..):(..)Z/;
timelocal($6, $5, $4, $3, $2-1, $1-1900);
}
erzeugeBga2();
open IN, "bga2";
while(<IN>) {
chop;
($timestamp, $user) = split;
push @{$zeit{$user}}, zeit($timestamp) if $user !~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}|xxx)/;
}
close IN;
sub zeitBis {
my $bis = shift;
my @zeitenBis = ();
foreach $user (keys %zeit) {
push @zeitenBis, $zeit{$user}->[$bis-1]-$zeit{$user}->[0] if @{$zeit{$user}}>=$bis;
}
(sort @zeitenBis)[int(@zeitenBis/2)];
}
printf "%d Tage bis zur 200ten Bearbeitung\n", zeitBis(200)/86400;
printf "%d Tage bis zur 1000ten Bearbeitung\n", zeitBis(1000)/86400;