#!/usr/bin/perl # $Id: maint.pl 9853 2003-03-04 21:21:05Z ralfbecker $ # # This script is used by WikkiTikkiTavi versions 0.1 and greater to maintain # the list of known remote pages. This is used by the TwinPages feature. # Typically, it will be set up as a cron job to run periodically (e.g., # once per week). # # See http://tavi.sourceforge.net/SisterWiki for more information. $database = ""; # Database name. $user = ""; # Database use name. $pass = ""; # Database password. $prefix = ""; # Table name prefix (e.g. "wiki_"). $linkptn = "([A-Z][a-z]+[A-Z][A-Za-z]*(/[A-Z][A-Za-z]+)?)"; use DBI; $dbh = DBI->connect("DBI:mysql:$database:127.0.0.1", $user, $pass) or die "Connecting: $DBI::errstr\n"; sub insert_page { my ($page) = @_; my ($qid); $qid = $dbh->prepare("SELECT page FROM " . $prefix . "remote_pages " . "WHERE site='$site' and page='$page'"); $qid->execute; if(!$qid->fetchrow_hashref) { $qid = $dbh->prepare("INSERT INTO " . $prefix . "remote_pages " . "VALUES('$page', '$site')"); $qid->execute; } return ""; } $qid = $dbh->prepare("SELECT prefix, url FROM " . $prefix . "sisterwiki)"); $qid->execute; while($row = $qid->fetchrow_hashref) { $site = $row->{'prefix'}; print "Scanning $site\n"; $_ = "lynx -source " . $row->{'url'}; s/&/\\&/g; s/;/\\;/g; $html = `$_`; $q2 = $dbh->prepare("DELETE FROM " . $prefix . "remote_pages " . "WHERE site='$site'"); $q2->execute; foreach(split(/\n/, $html)) { s/<[Aa].*>($linkptn)<\/[Aa]>/&insert_page($1)/geo; } }