User:KeithTyler/mwpush.pl
| This user page needs to be updated. Please help update this user page to reflect recent events or newly available information. Relevant discussion may be found on the talk page. |
mwpush.pl is a w:Perl script which submits any data provided on standard input (or in filenames given as the last argument(s) on the command line, see w:Perl diamond operator) to a given Wiki page on a given MediaWiki wiki. It was developed by Keith D. Tyler ¶ and uses code taken from upload.pl by User:Eloquence, adapted for page editing. This page is listed at Wikipedia:Tools/Editing tools#mwpush .
Of course, it is up to the operator of this script to:
- Ensure that the edits of other users are not lost
- Ensure that the script does not prove a burdensome load on the infrastructure. A good measure of hour-to-hour loads is indicated by the "job queue length" in Special:Statistics. In 2007, if that value is more than 500,000, then the servers are probably rather busy.
See also Wikipedia:Bot policy and the Python-based tool m:Using the python wikipediabot which is more up-to-date.
Usage
cat wikitext.txt | mwpush.pl -l UserName -p PassWord -w WikiSite -t WikiPage [-eh]
(or, alternately:)
mwpush.pl -l UserName -p PassWord -w WikiSite -t WikiPage [-eh] wikitext.txt
where:
- UserName is the name of a user on the target Wiki
- PassWord is the Wiki password for that user
- WikiSite is the hostname and path to a given wiki (for example,
www.wikipedia.orgorintranethostname/mediawiki). Do not include http:// or a trailing slash. - WikiPage is the verbatim name of the page you want to submit content to
- wikitext.txt is the name of the file containing your Wiki-ready content
Optional arguments:
- -h provides a brief usage guide
- -e only updates the target page if it does not already exist
Source
Source of mwpush.pl as of 00:51, 6 March 2008 (UTC)
#!/usr/bin/perl
# mwpush.pl - Push page data to a Wikimedia server
# By WikiPedia:User:KeithTyler
# Portions largely taken or based on upload.pl by WikiPedia:User:Eloquence
# call requirements
use Getopt::Std;
use LWP::Simple;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
use HTTP::Cookies;
#use warnings;
getopts('l:p:w:t:he');
if ($opt_h) { die "Usage: mwpush.pl -w <wiki host/path> -t <wiki page name> -l <wiki login> -p <wiki password> [-e] [files ...]\n"; }
if (!$opt_l) { die "Provide Wiki login with -l"; }
if (!$opt_p) { die "Provide Wiki password with -p"; }
if (!$opt_w) { die "Provide Wiki hostname and path with -w"; }
if (!$opt_t) { die "Provide Wiki page name with -t"; }
my $username=$opt_l;
my $password=$opt_p;
my $WIKI_PATH=$opt_w;
my $WIKI_PAGE=$opt_t;
my $onlyifempty=$opt_e;
### Login to wiki
# Set up connection data
my $browser=LWP::UserAgent->new();
my @ns_headers = (
'User-Agent' => 'MediaWiki Pusher 0.1 by KeithTyler', #Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20041107 Firefox/1.0',
'Accept' => 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*',
'Accept-Charset' => 'iso-8859-1,*,utf-8',
'Accept-Language' => 'en-US',
);
# Hold cookies
$browser->cookie_jar( {} );
# Make login request
$response=$browser->post("http://".$WIKI_PATH."/w/index.php?title=Special:Userlogin&action=submitlogin",
@ns_headers, Content=>[wpName=>$username,wpPassword=>$password,wpRemember=>"1",wpLoginAttempt=>"Log in"]);
# After logging in, we should be redirected to another page.
# If we aren't, something is wrong.
#
if($response->code!=302) {
print
"We weren't able to login. This could have the following causes:
* The username ($username) or password may be incorrect.
Solution: Re-run script with correct credentials.
* The MediaWiki software on the target host has been upgraded.
Solution: Go to http://commons.wikimedia.org/wiki/Commons:File_upload_service
and get a new version of the upload script.
* You are trying to hack this script for other wikis. The wiki you
are uploading to has cookie check disabled.
Solution: Try setting \$ignore_login_error to 1.
Regardless, we will now try to write the output from the server to
mwpush.debug.out....\n\n";
open(DEBUG,">mwpush.debug.out") or die "Could not write file.\n";
print DEBUG $response->as_string;
print
"This seems to have worked. Take a look at the file for further information or
send it to moeller AT scireview DOT de if you need help debugging the script.\n";
close(DEBUG);
exit 1;
}
### Get a wpEditToken
# We need to load our target page first in edit mode to capture a
# wpEditToken. Without this the submit page will not submit.
$response=$browser ->
get("http://".$WIKI_PATH."/w/index.php?title=".$WIKI_PAGE."&action=edit",
@ns_headers);
my $startTime;
my $editToken;
my $content;
$content = $response->as_string;
# Get EditToken
# Note: wpEditToken can contain "+" and "\"
($editToken) = ( $content =~ m/value\=\"([0-9a-f\+\\]*)\" name\=\"wpEditToken\"/ );
($editTime) = ( $content =~ m/value\=\"([0-9a-f]*)\" name\=\"wpEdittime\"/ );
($startTime) = ( $content =~ m/value\=\"([0-9a-f]*)\" name\=\"wpStarttime\"/ );
# Determine page existence state
# If we find "selected new" (a CSS class set), it is a new (empty) page
# This is preferable to depending on message text (which is changeable)
if ($onlyifempty) {
if ( ! ($content =~ m/class=\"selected new\"/ )) {
print "Existing page is not empty. Aborting due to -e.\n";
exit 1;
}
}
### Collect input data into string
my $INPUT_DATA;
# Read data
while (<>) {
$INPUT_DATA.=$_;
}
### Post data to Wiki
$response=$browser ->
post("http://".$WIKI_PATH."/w/index.php?title=".$WIKI_PAGE."&action=submit",
@ns_headers,
Content_Type=>'application/x-www-form-urlencoded',Content=>
[ wpTextbox1 => $INPUT_DATA,
wpSummary => "Automated page entry using MWPush.pl",
wpSave => "Save page",
wpSection => "",
wpStarttime => $startTime,
wpEdittime => $editTime,
wpEditToken => $editToken,
]);
### Evaluate response from Wiki
if($response->code!=302) {
print "Upload failed! Response was:\n";
print $response->as_string;
exit 1;
} else {
print "Uploaded successfully.\n";
}
# Evaluate operation
print "Everything seems to be OK. Log will be written to mwpush.log.\n";
open(LOG,">mwpush.log") or die "Could not write file.\n";
print LOG $response->as_string;
close(LOG);
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.