Wiki Paster: Unterschied zwischen den Versionen
Stella (Diskussion | Beiträge) K |
Stella (Diskussion | Beiträge) |
||
Zeile 1: | Zeile 1: | ||
− | <source lang=" | + | <source lang="perl">#! /usr/bin/perl -w |
+ | use strict; | ||
+ | use LWP; | ||
+ | use WWW::Mechanize; | ||
+ | use POSIX qw/localtime/; | ||
+ | |||
+ | ############################################################################### | ||
+ | # User Configuration | ||
+ | |||
+ | my $site = "http://brokenpipe.de/index.php"; | ||
+ | my $login_site = "$site/Spezial:Anmelden"; | ||
+ | my $wp_username = "Stella"; | ||
+ | my $wp_password = "keineahnung"; | ||
+ | |||
+ | ############################################################################### | ||
+ | |||
+ | my $minor = "off"; | ||
+ | if(scalar(@ARGV) && $ARGV[0] eq '--minor') { | ||
+ | $minor = "on"; | ||
+ | shift @ARGV | ||
+ | } | ||
+ | |||
+ | if(scalar(@ARGV) != 2) { | ||
+ | print STDERR "Usage: wiki-paste [--minor] PAGENAME FILETYPE\n\n"; | ||
+ | exit 1; | ||
+ | } | ||
+ | |||
+ | my ($pagename, $filetype) = @ARGV; | ||
+ | my $editurl = "$site?title=$pagename&action=edit"; | ||
+ | |||
+ | my $content; | ||
+ | while (<STDIN>) { $content .= $_ } | ||
+ | |||
+ | # Use Log::TraceMessages if installed. | ||
+ | BEGIN { | ||
+ | eval { require Log::TraceMessages }; | ||
+ | if ($@) { | ||
+ | print "Log::TraceMessages not available\n"; | ||
+ | *t = sub {}; | ||
+ | *d = sub { '' }; | ||
+ | } | ||
+ | else { | ||
+ | print "Using Log::TraceMessages\n"; | ||
+ | $Log::TraceMessages::On = 1; | ||
+ | *t = \&Log::TraceMessages::t; | ||
+ | *d = \&Log::TraceMessages::d; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | use LWP::UserAgent; | ||
+ | my $ua = LWP::UserAgent->new; | ||
+ | $ua->env_proxy; | ||
+ | |||
+ | my $mech = WWW::Mechanize->new(); | ||
+ | $mech->env_proxy; | ||
+ | |||
+ | # we'll be presented a 301-Redirect after issuing POST request. | ||
+ | # WWW::Mechanize won't do what we'd expect, so just remove 'POST' | ||
+ | # from the redirectable requests list ... | ||
+ | @{ $mech->requests_redirectable } = ( "GET", "HEAD" ); | ||
+ | |||
+ | $mech->get($login_site) or die; | ||
+ | |||
+ | t "trying to log in"; | ||
+ | $mech->submit_form ( | ||
+ | form_name => 'userlogin', | ||
+ | fields => { wpName => $wp_username, wpPassword => $wp_password }, | ||
+ | ) or die; | ||
+ | |||
+ | t "HTTP-Code returned on Login-POST: " . $mech->status(); | ||
+ | |||
+ | t "Getting Edit-Page of $pagename ..."; | ||
+ | $mech->get($editurl) or die; | ||
+ | |||
+ | die "HTTP-request failed, stop" | ||
+ | unless ($mech->success ()); | ||
+ | |||
+ | die "seems like we failed to log in, there's no edit textbox" | ||
+ | unless ($mech->content() =~ m/<textarea/); | ||
+ | |||
+ | t "Submitting content now..."; | ||
+ | $mech->submit_form ( | ||
+ | form_name => 'editform', | ||
+ | fields => { wpTextbox1 => "<source lang=\"$filetype\">$content</source>", | ||
+ | wpMinoredit => $minor }, | ||
+ | ) or die; | ||
</source> | </source> |
Version vom 15. August 2009, 11:05 Uhr
#! /usr/bin/perl -w
use strict;
use LWP;
use WWW::Mechanize;
use POSIX qw/localtime/;
###############################################################################
# User Configuration
my $site = "http://brokenpipe.de/index.php";
my $login_site = "$site/Spezial:Anmelden";
my $wp_username = "Stella";
my $wp_password = "keineahnung";
###############################################################################
my $minor = "off";
if(scalar(@ARGV) && $ARGV[0] eq '--minor') {
$minor = "on";
shift @ARGV
}
if(scalar(@ARGV) != 2) {
print STDERR "Usage: wiki-paste [--minor] PAGENAME FILETYPE\n\n";
exit 1;
}
my ($pagename, $filetype) = @ARGV;
my $editurl = "$site?title=$pagename&action=edit";
my $content;
while (<STDIN>) { $content .= $_ }
# Use Log::TraceMessages if installed.
BEGIN {
eval { require Log::TraceMessages };
if ($@) {
print "Log::TraceMessages not available\n";
*t = sub {};
*d = sub { '' };
}
else {
print "Using Log::TraceMessages\n";
$Log::TraceMessages::On = 1;
*t = \&Log::TraceMessages::t;
*d = \&Log::TraceMessages::d;
}
}
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->env_proxy;
my $mech = WWW::Mechanize->new();
$mech->env_proxy;
# we'll be presented a 301-Redirect after issuing POST request.
# WWW::Mechanize won't do what we'd expect, so just remove 'POST'
# from the redirectable requests list ...
@{ $mech->requests_redirectable } = ( "GET", "HEAD" );
$mech->get($login_site) or die;
t "trying to log in";
$mech->submit_form (
form_name => 'userlogin',
fields => { wpName => $wp_username, wpPassword => $wp_password },
) or die;
t "HTTP-Code returned on Login-POST: " . $mech->status();
t "Getting Edit-Page of $pagename ...";
$mech->get($editurl) or die;
die "HTTP-request failed, stop"
unless ($mech->success ());
die "seems like we failed to log in, there's no edit textbox"
unless ($mech->content() =~ m/<textarea/);
t "Submitting content now...";
$mech->submit_form (
form_name => 'editform',
fields => { wpTextbox1 => "<source lang=\"$filetype\">$content
wpMinoredit => $minor },
) or die; </source>