Difference between revisions of "Caretaker.pl"

From Organic Design wiki
(not needed in sub anymore cos not called by wikid.pl)
m
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
{{legacy}}
 +
<source lang="perl">
 
#!/usr/bin/perl
 
#!/usr/bin/perl
# {{perl}}
 
 
use DBI;
 
use DBI;
 +
require "wiki.pl";
  
sub formatLink {
+
# Wiki settings
my $link = shift;
+
$::wiki = "http://www.organicdesign.co.nz/wiki/index.php";
$link =~ tr/_/ /;
+
$::wikiuser = 'bender';
$link =~ s/\s*([\[\]\|])\s*/$1/g;
+
$::wikipass = '******';
return $link;
+
 
}
+
# DB settings
 +
$::dbname = 'od';
 +
$::dbpfix = '';
 +
$::dbuser = $::wikiuser;
 +
$::dbpass = $::wikipass;
 +
 
 +
# Login to wiki
 +
wikiLogin($::wiki, $::wikiuser, $::wikipass);
 +
my %ns = wikiGetNamespaces($::wiki);
  
my $dbh = DBI->connect('DBI:mysql:od',lc $::peer,$::pwd1) or die DBI->errstr;
+
# Connect to DB
my @ns = ('','Talk:','User:','User talk:','Project:','Project talk:',
+
my $dbh = DBI->connect('DBI:mysql:'.$::dbname, lc $::dbuser, $::dbpass) or die DBI->errstr;
'Image:','Image talk:','Mediawiki:','Mediawiki talk:','Template:',
 
'Template talk:','Help:','Help talk:','Category:','Category talk:');
 
  
 
# Get id of first article after mediawiki built in articles
 
# Get id of first article after mediawiki built in articles
my $sth = $dbh->prepare('SELECT cur_id FROM cur WHERE cur_title = "Zhconversiontable"');
+
my $sth = $dbh->prepare('SELECT page_id FROM '.$::dbpfix.'page WHERE page_title = "Zhconversiontable"');
 
$sth->execute();
 
$sth->execute();
 
my @row = $sth->fetchrow_array;
 
my @row = $sth->fetchrow_array;
Line 23: Line 31:
  
 
# Get last article id
 
# Get last article id
my $sth = $dbh->prepare('SELECT cur_id FROM cur ORDER BY cur_id DESC');
+
my $sth = $dbh->prepare('SELECT page_id FROM '.$::dbpfix.'page ORDER BY page_id DESC');
 
$sth->execute();
 
$sth->execute();
 
@row = $sth->fetchrow_array;
 
@row = $sth->fetchrow_array;
Line 30: Line 38:
  
 
# Loop through all articles one per second
 
# Loop through all articles one per second
my $sth = $dbh->prepare('SELECT cur_namespace,cur_title,cur_is_redirect FROM cur WHERE cur_id=?');
+
my $sth = $dbh->prepare('SELECT page_namespace,page_title,page_is_redirect FROM '.$::dbpfix.'page WHERE page_id=?');
 
my $done = 'none';
 
my $done = 'none';
 
for ($first..$last) {
 
for ($first..$last) {
Line 36: Line 44:
 
@row = $sth->fetchrow_array;
 
@row = $sth->fetchrow_array;
 
my @comments = ();
 
my @comments = ();
my $title = $ns[$row[0]].$row[1];
+
my $title = $ns{$row[0]} ? $ns{$row[0]}.':'.$row[1] : $row[1];
 
if ($title && ($row[2] == 0)) {
 
if ($title && ($row[2] == 0)) {
 +
print "$title\n";
  
 
# Read the article content
 
# Read the article content
$::article = wikiRawPage $::wiki, $title;
+
$text = wikiRawPage($::wiki, $title);
$::article =~ s/^\s+//;
+
$text =~ s/^\s+//;
$::article =~ s/\s+$//;
+
$text =~ s/\s+$//;
my $backup = $::article;
+
my $backup = $text;
my $isCode = $title =~ /\.(as|c|cpp|c\+\+|h|sh|css|html?|pl|php|R|tex|xml|xslt)$/i;
 
 
 
# --------------------------------------------------------------------------------------------------------------------- #
 
 
 
if (!$isCode) {
 
 
 
# Format catlinks and normal links
 
my $tmp = $::article;
 
my @links = $::article =~ /\[{2}category:([^\]]+)\]{2}/ig;
 
my %links = (); $links{$_} = 1 for @links;
 
my $cats = '';
 
if ($title =~ /^[a-z0-9-]+\.(com?|edu|govt?|net|org|mil|info|school|iwi|ac|geek|aero|biz|coop|museum|name|pro)(\.[a-z]{2})?$/i) {
 
push @comments, 'cat in [[Category:Domain names|Domain names]]'
 
unless $links{'Domain names'}++;
 
}
 
if ($::article =~ /<\/math>/) {
 
push @comments, 'cat in [[Category:Articles containing maths|Maths]]'
 
unless $links{'Articles containing maths'}++;
 
}
 
@links = sort keys %links;
 
if ($#links >= 0) {
 
for (@links) { tr/_/ /; $cats .= "[[Category:$_]]"; }
 
$::article =~ s/\s*\[{2}\s*category:[^\]]+\s*\]{2} *//sig;
 
$::article =~ s/^\s+//;
 
$::article =~ s/\s+$//;
 
$::article = "$cats\n$::article";
 
push @comments, 'categories' if $::article ne $tmp;
 
}
 
 
 
# Format normal links
 
$tmp = $::article;
 
$::article =~ s/(\[{2}[^\]\r\n]+\]{2})/formatLink($1)/eg;
 
push @comments, 'links' if $::article ne $tmp;
 
  
# Format headings
+
# ------ REPLACEMENT RULES --------------------------------------------------------------- #
$tmp = $::article;
 
my $min = 10;
 
for ($::article =~ /^(=+) *.+? *=+ *$/mg) { $min = length if $min > length }
 
$::article =~ s/[\r\n]+ *={$min}(=*) *([^=\r\n]+?) *=+ *[\r\n]+/\n\n$1 $2 $1\n/g if --$min;
 
push @comments, 'headings' if $::article ne $tmp;
 
}
 
  
 
# Common typo's - put square brackets around first letter so it doesn't get caretaken itself!
 
# Common typo's - put square brackets around first letter so it doesn't get caretaken itself!
 
my $typos
 
my $typos
= $::article =~ s/[i]mpliment/implement/g
+
= $text =~ s/[i]mpliment/implement/g
+ $::article =~ s/[d]ependance/dependence/g
+
+ $text =~ s/[d]ependance/dependence/g
+ $::article =~ s/[h]ardwire/hard-wire/g;
+
+ $text =~ s/[f]reind/friend/g;
 +
 
push @comments, ($typos == 1 ? 'typo' : 'typos') if $typos;
 
push @comments, ($typos == 1 ? 'typo' : 'typos') if $typos;
  
# Apply rules to Xml:Articles
+
# ---------------------------------------------------------------------------------------- #
if ($title =~ /^Xml:/) {
 
 
 
# Remove empty elements
 
push @comments, 'removed empty elements' if $::article =~ s/^\s*<(read|write|category|init|data|view|edit|save)>\s*<\/\w+>[\r\n]*//gms;
 
 
 
}
 
 
 
# --------------------------------------------------------------------------------------------------------------------- #
 
  
 
# If article changed, write and comment
 
# If article changed, write and comment
$::article =~ s/^\s+//;
+
$text =~ s/^\s+//;
$::article =~ s/\s+$//;
+
$text =~ s/\s+$//;
if ($::article ne $backup) {
+
if ($text ne $backup) {
wikiPageEdit $::wiki, $title, $::article, '[[talk:caretaker.pl|Caretaker]]: '.join(', ',@comments), 1;
+
wikiPageEdit($::wiki, $title, $text, join(', ',@comments), 1);
 
$done = $done + 1;
 
$done = $done + 1;
 
}
 
}
 
}
 
}
sleep(1);
+
sleep(0.2);
 
}
 
}
  
my $comment = "Daily [[talk:caretaker.pl|caretaking]] tasks completed: ".($last-$first)." articles examined, ".($done-1)." adjusted.";
 
logAdd $comment;
 
wikiPageAppend($::wiki, $::wikilog, "\n*".localtime()." : $comment", $comment);
 
 
$sth->finish;
 
$sth->finish;
 
$dbh->disconnect;
 
$dbh->disconnect;
 +
</source>
 +
[[Category:PERL]]

Latest revision as of 03:19, 23 April 2020

Legacy.svg Legacy: This article describes a concept that has been superseded in the course of ongoing development on the Organic Design wiki. Please do not develop this any further or base work on this concept, now this page is for historic record only.
#!/usr/bin/perl
use DBI;
require "wiki.pl";

# Wiki settings
$::wiki = "http://www.organicdesign.co.nz/wiki/index.php";
$::wikiuser = 'bender';
$::wikipass = '******';

# DB settings
$::dbname = 'od';
$::dbpfix = '';
$::dbuser = $::wikiuser;
$::dbpass = $::wikipass;

# Login to wiki
wikiLogin($::wiki, $::wikiuser, $::wikipass);
my %ns = wikiGetNamespaces($::wiki);

# Connect to DB
my $dbh = DBI->connect('DBI:mysql:'.$::dbname, lc $::dbuser, $::dbpass) or die DBI->errstr;

# Get id of first article after mediawiki built in articles
my $sth = $dbh->prepare('SELECT page_id FROM '.$::dbpfix.'page WHERE page_title = "Zhconversiontable"');
$sth->execute();
my @row = $sth->fetchrow_array;
$sth->finish;
my $first = $row[0]+1;

# Get last article id
my $sth = $dbh->prepare('SELECT page_id FROM '.$::dbpfix.'page ORDER BY page_id DESC');
$sth->execute();
@row = $sth->fetchrow_array;
$sth->finish;
my $last = $row[0];

# Loop through all articles one per second
my $sth = $dbh->prepare('SELECT page_namespace,page_title,page_is_redirect FROM '.$::dbpfix.'page WHERE page_id=?');
my $done = 'none';
for ($first..$last) {
	$sth->execute($_);
	@row = $sth->fetchrow_array;
	my @comments = ();
	my $title = $ns{$row[0]} ? $ns{$row[0]}.':'.$row[1] : $row[1];
	if ($title && ($row[2] == 0)) {
		print "$title\n";

		# Read the article content
		$text = wikiRawPage($::wiki, $title);
		$text =~ s/^\s+//;
		$text =~ s/\s+$//;
		my $backup = $text;

		# ------ REPLACEMENT RULES --------------------------------------------------------------- #

		# Common typo's - put square brackets around first letter so it doesn't get caretaken itself!
		my $typos
			= $text =~ s/[i]mpliment/implement/g
			+ $text =~ s/[d]ependance/dependence/g
			+ $text =~ s/[f]reind/friend/g;
			
		push @comments, ($typos == 1 ? 'typo' : 'typos') if $typos;

		# ---------------------------------------------------------------------------------------- #

		# If article changed, write and comment
		$text =~ s/^\s+//;
		$text =~ s/\s+$//;
		if ($text ne $backup) {
			wikiPageEdit($::wiki, $title, $text, join(', ',@comments), 1);
			$done = $done + 1;
			}
		}
	sleep(0.2);
	}

$sth->finish;
$dbh->disconnect;