Jump to content

User:Polbot/source/Checktemplates.pl

From Wikipedia, the free encyclopedia
use strict;
use Perlwikipedia;

my $Polbot_password = '(secret password)';

print "\nLogging in to Wikipedia.\n" ;
my $pw=Perlwikipedia->new();
$pw->{mech}->agent('Bot/polbot');
my $login_status=$pw->login('Polbot', $Polbot_password);
die "I can't log in." unless ($login_status eq 0);

my $stats_list = '';
my $page_of_templates = $pw->get_text("User:Polbot/templatelist");
my @template_list = ($page_of_templates =~ m/\[\[Template\:([^\]]*)\]\]/g);

foreach my $template_name (@template_list) {
	my $template = $pw->get_text("Template:$template_name");
	print "Examining Template:$template_name\n";
	my $table = "Status of links for {{tl|$template_name}}\n\n{|class=\"wikitable sortable\"\n|-\n! display order\n! displayed link\n!article\n! notes\n";
	
	while ($template =~ s/(.*)<noinclude>.*?<\/noinclude>/$1/) {};
	
	my @links = ($template =~ m/\[\[([^\[\]]*)\]\]/g);
	print " Numlinks: " . scalar(@links) . "\n";
	
	my $i = 0;

	foreach my $link (@links) {
		next if $link =~ m/^\:?Category:/;
		next if $link =~ m/^..\:/;
		
		$i++;
		$table .= "|-\n| $i ";
		my $disp_link = $link;
		my $art_name = $link;
		if ($link =~ m/(.*)\|(.*)/) {
			$disp_link = $2;
			$art_name = $1;
		}
		print " $i : $art_name\n";
		$table .= "|| $disp_link || [[$art_name]] ";
		
		my $art = $pw->get_text($art_name);
		my $art_notes = "";
		
		if (! $art) {
			$art_notes = "redlink";
		} else {
			# Look for rd
			if ($art =~ m/\#\s*redirect\s*\[\[([^\]]*)\]\]/i) {
				$art_notes = "redirect to [[$1]]. ";
			} else {
				
				# Look for template
				if ($art !~ m/\{\{\s*$template_name\s*(\}\}|\|)/i) {
					$art_notes = "template missing. ";
				}
				
				# Look for infobox
				if ($art =~ m/\{\{\s*taxobox/i) {
					
					# Cut out everything except the taxobox
					$art =~ s/.*(\{\{\s*taxobox[^\{\}]*(?:(?:\{\{[^\{\}]*\}\})[^\{\}]*)*\}\}).*/$1/si;
					
					if ($art =~ m/\|\s*status\s*=\s*EX\b/is) {
						$art_notes .= "extinct. ";
					}
					
					if ($art =~ m/\|\s*subspecies\s*=/is) {
						$art_notes .= "subspecies. ";
					}
		
				} else {
					$art_notes .= "taxobox missing. ";
				}
			}
		}
			
		$art_notes = "nothing unusual. " if ! $art_notes;
		$table .= "|| $art_notes\n";	
		
		#last if $i > 15;
	}
	
	$table .= "|}";
	
	print "Writing...\n\n";
	$pw->edit("Wikipedia:WikiProject Mammals/Article templates/stats/$template_name", $table, "Creating usage report per [[Wikipedia:Bot requests#Template-checking bot]]");
	$stats_list .= "* [[Wikipedia:WikiProject Mammals/Article templates/stats/$template_name]]\n";
}

$pw->edit("Wikipedia:WikiProject Mammals/Article templates/stats", $stats_list, "Creating usage report per [[Wikipedia:Bot requests#Template-checking bot]]");