I created a script that allows me to update a page on a media wiki. It uses WWW::Mechanize, IO::All and Config::Std. The last two modules aren’t needed probably. But it makes it all a lot simpler.
#!/usr/bin/perl -w
use IO::All;
use WWW::Mechanize;
use Config::Std;
read_config "$ENV{HOME}/.mediawiki" => my %config;
my $username = $config{login}{username};
my $password = $config{login}{password};
my $hostname = $config{login}{hostname};
my $title = $ARGV[0] or die "usage: mediawiki [page title with under scores]\n\n";
my $url = "http://$hostname/mediawiki/index.php?title=$title&action=edit";
my $ua = WWW::Mechanize->new;
my $login_url = "http://$hostname/mediawiki/index.php?title=Special:Userlogin&returnto=Main_Page";
$ua->get($login_url);
$ua->field('wpName', $username);
$ua->field('wpPassword', $password);
$ua->click('wpLoginattempt');
$ua->get($url);
$ua->form_number(1);
my $form = $ua->current_form();
my $tmpfile = io('/tmp/mediawiki-1');
$form->value('wpTextbox1') > $tmpfile;
system('vi /tmp/mediawiki-1');
$tmpfile->open('r');
my $content = $tmpfile->slurp;
$ua->field('wpTextbox1', $content);
$ua->click('wpSave');
print "Done!\n\n";
The configuration is read from /home/$USER/.mediawiki. It should look something like this.
[login]
username=your name
password=your password
hostname=your wiki hostname
Where hostname should be something like ’localhost’ or ‘www.somedomain.org’.
Oh, this code comes without any warranty. Use at your own risk.