User:Polbot/source/statsproblems.pl

# statsproblems.pl
use strict;
use Perlwikipedia;

my $soonest_next_op = time;

print "\nStarting polbot\n" ;
my $pw=Perlwikipedia->new();
#$pw->{debug} = 1;
$pw->{mech}->agent('Bot/WP/EN/Quadell/polbot');

print "Logging in\n";
my $login_status=$pw->login('Polbot','(bot password)');
die "I can't log in." unless ($login_status eq 0);

my %judges;

print "Getting judges.\n";
my $main_wiki = $pw->get_text('Wikipedia:WikiProject United States courts and judges/judgestats');
my @lines = split(/\n/, $main_wiki);
foreach my $line (@lines) {
	# Ignore non-listed lines
	if ($line =~ /^\| \[\[([^\|]+)\]\] \|\|/) {
		my $listed_judge = $1;
		$judges{$listed_judge} = $listed_judge;
	}
}

print scalar(keys %judges) . " judges\n";

# Get known replacements
my %replacements;
print "Getting known replacements.\n";
my $wiki = $pw->get_text('Wikipedia:WikiProject United States courts and judges/judgestats/known replacements');
my @lines = split(/\n/, $wiki);
foreach my $line (@lines) {
	# Ignore non-listed lines
	if ($line =~ /^\* \[\[(.*)\]\] should be \[\[(.*)\]\]$/m) {
		my $tempfrom = $1;
		my $tempto = $2;
		$replacements{$tempfrom} = $tempto;
	}
}

print scalar(keys %replacements) . " replacements\n";

print "Looking through judges:\n";
foreach my $judgekey (sort keys %judges) {
	my $judge = $judgekey;
	print "[[$judge]] ";

	# check for replacements
	
	if ($replacements{$judgekey}) {
		$judges{$judgekey} = $replacements{$judgekey};
		print "predefined exception: " . $replacements{$judgekey} . "\n";
	} else {
		
		# check for redirect
		
		my $wiki = $pw->get_text($judge);
		if ($wiki =~ m/\#\s*redirect\s*\[\[(.*)\]\]/i) {
			$judge = $1;
			print "rd to [[$judge]], ";
			$wiki = $pw->get_text($judge);
		}
		
		# is it a judge?
		
		if ($wiki =~ m/\[\[\s*category\s*:\s*(Judges of the United States |United States Supreme Court justices|Chief Justices of the United States)/i) {
			print "good.\n";
			$judges{$judgekey} = $judge;
		} else {
			print "WRITING ERROR.\n";
			my $tempwiki = $pw->get_text('Wikipedia:WikiProject United States courts and judges/judgestats/problems');
			$tempwiki .= "* [[$judgekey]]\n";
			$pw->edit('Wikipedia:WikiProject United States courts and judges/judgestats/problems', $tempwiki, "* [[$judgekey]]");
		}
	}
}

# Replace all
foreach my $judge (sort keys %judges) {
	if ($judge ne $judges{$judge}) {
		$main_wiki =~ s/\[\[$judge\]\]/[[$judges{$judge}]]/g;
	}
}

# Pull down info for those whose seats changed by process of law
$main_wiki =~ s/\n\| ([^\|]*) \|\| ([^\|]*) \|\| ([^\|]* \|\| [^\|]+ \|\| [^\|]+ \|\| [^\|]+ \|\| [^\|]+) \|\| ([^\|]+ \|\| [^\|]+) \|\| assignment to another court ([^\n]*)\n\|\-\n\| \1 \|\| ([^\|]*) \|\| \- \|\| \- \|\| \- \|\| \- \|\| \- \|\| ([^\n]*)\n/\n| $1 || $2 || $3 || $4 || assignment to another court $5\n|-\n| $1 || $6 || $3 || $7\n/sg;

print "\n\nWriting back... ";
$pw->edit('Wikipedia:WikiProject United States courts and judges/judgestats', $main_wiki, "cleanup");

die"done.\n";