Jump to content

User:Polbot/source/Cheese.pl

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

my $Polbot_password = '(bot password)';
my $soonest_next_op = time;
my $wait_time = 10;

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);

print "{{Cheese!}}\n";

my @links = $pw->what_links_here("Template:Cheese");
my @transcluders = ();
print scalar (@links) . " link to it.\n";

foreach my $link (@links) {
	if ($link->{type} eq "transclusion") {
		push @transcluders, $link->{title};
	}
}

print scalar (@transcluders) . " transclude it.\n";

foreach my $transcluder (@transcluders) {
	print "\nReading [[$transcluder]]\n";
	my $wiki = $pw->get_text($transcluder);

	if ($wiki =~ m/\{\{\s*Cheese\s*\|([^\|\{\}\[\]]*(?:[\[\{]+[^\[\]\}\{]*[\]\}]+[^\|\{\}\[\]]*)*)\|([^\|\{\}\[\]]*(?:[\[\{]+[^\[\]\}\{]*[\]\}]+[^\|\{\}\[\]]*)*)\|([^\|\{\}\[\]]*(?:[\[\{]+[^\[\]\}\{]*[\]\}]+[^\|\{\}\[\]]*)*)\|([^\|\{\}\[\]]*(?:[\[\{]+[^\[\]\}\{]*[\]\}]+[^\|\{\}\[\]]*)*)\|([^\|\{\}\[\]]*(?:[\[\{]+[^\[\]\}\{]*[\]\}]+[^\|\{\}\[\]]*)*)\|([^\|\{\}\[\]]*(?:[\[\{]+[^\[\]\}\{]*[\]\}]+[^\|\{\}\[\]]*)*)\|([^\|\{\}\[\]]*(?:[\[\{]+[^\[\]\}\{]*[\]\}]+[^\|\{\}\[\]]*)*)\|([^\|\{\}\[\]]*(?:[\[\{]+[^\[\]\}\{]*[\]\}]+[^\|\{\}\[\]]*)*)\|([^\|\{\}\[\]]*(?:[\[\{]+[^\[\]\}\{]*[\]\}]+[^\|\{\}\[\]]*)*)\}\}/is) {
		my $name = $1;
		my $image = $2;
		my $country = $3;
		my $regiontown = $4;
		my $source = $5;
		my $pasteurised = $6;
		my $texture = $7;
		my $aging = $8;
		my $certification = $9;
		
		$name =~ s/^\s*(.*?)\s*$/$1/;
		$image =~ s/^\s*(.*?)\s*$/$1/;
		$country =~ s/^\s*(.*?)\s*$/$1/;
		$regiontown =~ s/^\s*(.*?)\s*$/$1/;
		$source =~ s/^\s*(.*?)\s*$/$1/;
		$pasteurised =~ s/^\s*(.*?)\s*$/$1/;
		$texture =~ s/^\s*(.*?)\s*$/$1/;
		$aging =~ s/^\s*(.*?)\s*$/$1/;
		$certification =~ s/^\s*(.*?)\s*$/$1/;

		my $newtemplate = "{{Infobox Cheese\n| name = $name\n| image = $image\n| othernames = \n| country = $country\n| regiontown = $regiontown\n";
		$newtemplate .= "| region = \n| town = \n| source = $source\n| pasteurised = $pasteurised\n| texture = $texture\n| fat = \n| protein = \n";
		$newtemplate .= "| dimensions = \n| weight = \n| aging = $aging\n| certification = $certification\n}}";
		
		$wiki =~ s/\{\{\s*Cheese(\s|\|)[^\{\}]*(\{\{[^\{\}]*\}\}[^\{\}]*)*\}\}/$newtemplate/is;
		wiki_write($transcluder, $wiki, "{{cheese}} -> {{Infobox Cheese}}, per [[Wikipedia:Bot requests#Template Replacement {{Infobox_Cheese}}]]");
		
	} else { print "template not found\n"; }
}
		
sub wiki_write {
	my $article_name = shift;
	my $wiki_out = shift;
	my $edit_summary = shift;
	
	$|=1;
	print " Waiting " . ($soonest_next_op - time) . " secs... ";
	$|=1;
	while (time < $soonest_next_op) {};				
	$soonest_next_op = time + $wait_time;
	print "Writing [[$article_name]]\n";
	
	$pw->edit($article_name, $wiki_out, $edit_summary);
}