Rechercher une page de manuel
WWW::Mechanize::TWiki.3pm
Langue: en
Version: 2009-05-26 (debian - 07/07/09)
Section: 3 (Bibliothèques de fonctions)
Sommaire
NAME
WWW::Mechanize::TWiki - WWW::Mechanize subclass to navigate TWiki wikisSYNOPSIS
This document describes a subclass of WWW::Mechanize. Knowledge of WWW::Mechanize usage is assumed.use File::Basename; use WWW::Mechanize::TWiki; my $mech = WWW::Mechanize::TWiki->new( agent => File::Basename::basename( $0 ), autocheck => 1 ) or die $!; $mech->cgibin( 'http://ntwiki.ethermage.net/~develop/cgi-bin', { scriptSuffix => '' } ); # (optional) establish credentials --- do this *after* setting cgibin # $mech->credentials( undef, undef, USERNAME => PASSWORD ); # get a list of topics in the _default web (typically somewhere around 11 topics) my @topics = $mech->getPageList( '_default' ); # create a new page (no modifications, just use the template) my $topic = 'Tinderbox.TestsReportSvn' .$svnRev; $mech->edit( $topic, { topicparent => 'WebHome', templatetopic => 'TestReportTemplate', formtemplate => 'TestReportForm', } ); $mech->click_button( value => 'Save' ); # attach a file to the newly-created topic $mech->follow_link( text => 'Attach' ); $mech->submit_form( fields => { filepath => 'report.txt', filecomment => `date`, hidefile => undef, } ); # change a topic $mech->edit( $topic ); $mech->field( text => 'New topic text' ); $mech->click_button( value => 'Save' ); # append to a topic $mech->edit( $topic ); my $text = $mech->field( 'text' ); $text .= " * Adding to the text! `date`"; $mech->field( text => $text ); $mech->click_button( value => 'Save' );
DESCRIPTION
WWW::Mechanize::TWiki provides a programatic interface to TWiki's REST interface. It does this by mapping perl functions and data structures onto a TWiki URI.For example, WWW::Mechanize::TWiki will turn this method call
$mech->edit( 'Tinderbox.TestsReportSvn', { topicparent => 'WebHome', templatetopic => 'TestReportTemplate', formtemplate => 'TestReportForm', } );
into the following URI: (encoding as needed)
http://twiki.org/cgi-bin/twiki/edit/Tinderbox.TestReport?topicparent=WebHome;templatetopic=TestReportTemplate;formtemplate=TestReportForm
(or http://twiki.org/cgi-bin/twiki/edit.cgi/Tinderbox.TestReport..., or http://twiki.org/cgi-bin/twiki/edit.pl/Tinderbox.TestReport..., etc. depending on the scriptSuffix option passed to cgibin())
This is the added functionality on top of CPAN:WWW::Mechanize. CPAN:WWW::Mechanize functions can still be called, naturally.
Setup / Configuration
cgibin( cgi-uri, { scriptSuffix } );Gets or sets the URI cgi-bin directory of the TWiki scripts
$mech->cgibin( 'http://twiki.org/cgi-bin/twiki/' ); print $mech->cgibin(); >http://twiki.org/cgi-bin/twiki/ $mech->cgibin( 'http://tinderbox.wbniv.wikihosting.com/cgi-bin/twiki/', { scriptSuffix => '.cgi' } ); print $mech->cgibin(); >http://tinderbox.wbniv.wikihosting.com/cgi-bin/twiki/
pub( pub-uri );
Gets or sets the URI of the TWiki pub directory
setting pub is optional, although generally recommended. it is required for downloading or managing attachments.
Web Methods
getPageList( webName );Returns an array of (fully-qualified) topic names for the specified webName
my @topics = $mech->getPageList( '_default' ); print "@topics\n"; >WebChanges WebHome WebIndex WebLeftBar WebNotify WebPreferences WebRss WebSearch WebSearchAdvanced WebStatistics WebTopicList my @topics = $mech->getPageList( '_empty' ); print "@topics\n"; >
Topic Methods
getAttachmentsList( topicName );Returns an array of attachments of a fully-qualified topicName (includes wiki web name). Each array element is a hash reference which is keyed by the column names.
my @attachments = getAttachmentsList( 'TWiki.WabiSabi' ); print Data::Dumper::Dumper( \@attachments ); >$VAR1 = [ > { 'filename' => 'report.txt', comment => '', hidden => '' }, > { 'filename' => 'report2.txt', comment => '', hidden => 'h' }, >];
Automatic Methods and Parameters
Invoking method that isn't listed above will construct a URI based on the method's name and its parameters (in a hash reference) and forwards it using WWW::Mechanize::get().EXPORT
None by default.Examples
upgrade_topics.pl
This scriptuse WWW::Mechanize::TWiki; use Getopt::Long;
my $Config;
my $result = GetOptions( $Config, #
'cgibin=s', 'scriptsuffix=s', 'web=s',
'user=s', 'password=s', # miscellaneous/generic options
'verbose|v', );
my $mech = WWW::Mechanize::TWiki->new() or die $!; $mech->cgibin( $Config->{cgibin}, { scriptSuffix => $Config->{scriptsuffix} } ); $mech->credentials( undef, undef, $Config->{user} => $Config->{password} ) if $Config->{user};
my @topics = @ARGV
? map { ``$Config->{web}/$_'' } @ARGV
: $mech->getPageList( $Config->{web} );
my @errors; foreach my $topic ( @topics ) {
print ``Processing $topic\n'' if $Config->{verbose};
$mech->edit( $topic ); $mech->field( forcenewrevision => 'on' ); $mech->click_button( value => 'Save' ); push @errors, $topic if ( $mech->status() != 200 ); } print scalar @topics, " topics\n" if $Config->{verbose}; if ( @errors ) { print STDERR "Errors processing the following topics:\n"; foreach my $topic ( @errors ) { print STDERR "\t$topic\n"; } }
bugbase_create_plugins_gateways.pl
This script snippet is used to create a gateway topic for bugs for each TWikiExtension on twiki.org: _Note_ that develop.twiki.org uses TemplateLogin, and how it has to login differently than a site using credentials.use WWW::Mechanize::TWiki 0.11;
my $plugin_topics = qr/.+(Plugin|Contrib|AddOn)$/;
################################################################################
my $mechBugsBase = WWW::Mechanize::TWiki->new( autocheck => 1 ) or die $!; $mechBugsBase->cgibin( 'http://develop.twiki.org/~develop/cgi-bin' );
my $mechTWikiDotOrg = WWW::Mechanize::TWiki->new() or die $!; $mechTWikiDotOrg->cgibin( 'http://twiki.org/cgi-bin' );
# login to develop.twiki.org $mechBugsBase->login( 'Bugs.WebHome' ); $mechBugsBase->field( username => USERNAME ); $mechBugsBase->field( password => PASSWORD ); $mechBugsBase->submit(); # get list of extension gateway pages my @bugsTopics = $mechBugsBase->getPageList( 'Bugs', { search => $plugin_topics } );
# create new gateway page for each twiki.org extension foreach my $topic ( $mechTWikiDotOrg->getPageList( 'Plugins', { search => $plugin_topics } ) ) {
my ( $extension ) = $topic =~ /^Plugins\.(.+)$/; # get base topic name
next if grep { /^Bugs\.${extension}$/ } @bugsTopics; # don't change any already there
print ``Creating $extension\n''; $mechBugsBase->edit( ``Bugs.$extension'', {
templatetopic => 'ExtensionTemplate',
topicparent => 'Extension',
} ); $mechBugsBase->click_button( value => 'Save' ); sleep rand 3; # be nice to the poor server }
DEPENDENCIES
CPAN:WWW::Mechanize CPAN:HTML::TableExtract CPAN:MIME::Base64 (for authentication)
SEE ALSO
WWW::Mechanize, http://twiki.orgTODO
cgibin and pub parameters should be able to be specified in the constructor document use with CPAN:LWP::UserAgent::TWiki::TWikiGuest (and understand how to make other agents for use with LDAP, etc.) getAttachmentList is very specific, but it is built upon a general algorithm to convert a table into a perl array of hash references; make a method publically available look into ways for a TWiki installation to "publish" its interface TemplateLogin domains require different client code to login; look into making this happen transparently
AUTHOR
Will Norris, <wbniv@cpan.org>COPYRIGHT AND LICENSE
Copyright (C) 2004,2006 by Will NorrisThis library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.4 or, at your option, any later version of Perl 5 you may have available.
Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre