用户:SubstWelcomeBot/1.0
外观
#!/usr/bin/perl # SubstWelcome.pl - {{welcome}} to {{subst:welcome}} bot # By WikiPedia:User:Jnlin # Portions largely taken or based on upload.pl by WikiPedia:User:Eloquence # and mwpush.pl by WikiPedia:User:KeithTyler # Modified from STcatBot2.0.pl - Simplified and Traditional CATegorization roBOT # Disclaimer: No warranty ganranteed. Use at your own risk. # call requirements use Getopt::Std; use LWP::Simple; use LWP::UserAgent; use HTTP::Request; use HTTP::Response; use HTTP::Cookies; #use warnings; my $username="SubstWelcomeBot"; #input your username here, only English names are tested. my $password="****"; #input your password here my $WIKI_PATH="zh.wikipedia.org"; my $WIKI_PAGE; my $MAX_COUNT=100; # Max subst done at each run ### Login to wiki # Set up connection data my $browser=LWP::UserAgent->new(); my @ns_headers = ( 'User-Agent' => 'SubstWelcomeBot by Jnlin', #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) { #cannot login 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 rfget.debug.out....\n\n"; open(DEBUG,">rfget.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; } my $URL; my $pagename; my $count = 0; my $string1 = "以下頁面連結到這裡"; my $string2 = "(包含)"; my $string3 = "User talk"; my $tmp; my $flag = 0; my $content1; my $content2; my $editToken; my $editTime; my $filestartstr; my $fileendstr; my $filestart; my $fileend; #go to Whatlinkshere/Template:Welcome and get the contents $URL="http://".$WIKI_PATH."/w/index.php?title=Special:Whatlinkshere/Template:Welcome&limit=500&from=0"; $response=$browser->get($URL, @ns_headers); @content=split(/\n/, $response->as_string); foreach $tmp (@content) # process { if($count >= $MAX_COUNT) # max process count { last; } # find to string1 if($flag == 0 && $tmp =~ /$string1/) { $flag=1; } if($flag == 0) { next; } # if the template is included and is a user talk page if($tmp =~ /$string2/ && $tmp =~ /$string3/) { #go to the target page $tmp =~ /<a href=\"\/wiki\/([^\"]*)\"/; $pagename = $1; $URL="http://".$WIKI_PATH."/w/index.php?title=".$pagename."&action=edit"; $response=$browser->get($URL, @ns_headers); $content1=$response->as_string; # Get EditToken ($editToken) = ( $content1 =~ m/value\=\"([0-9a-f\\]*)\" name\=\"wpEditToken\"/ ); ($editTime) = ( $content1 =~ m/value\=\"([0-9a-f]*)\" name\=\"wpEdittime\"/ ); $filestartstr="<textarea tabindex='1' accesskey=\",\" name=\"wpTextbox1\" id=\"wpTextbox1\" rows='25'"; $fileendstr="</textarea>"; $filestart= index($content1, $filestartstr); $filestart+=92; $fileend= index($content1, $fileendstr); $content2=substr($content1, $filestart, $fileend-$filestart); #substitute $content2 =~ s/{{welcome}}/{{subst:welcome}}/gi; $response=$browser->post("http://".$WIKI_PATH."/w/index.php?title=".$pagename."&action=submit", @ns_headers, Content_Type=>'form-data',Content=> [ wpTextbox1 => $content2, wpSummary => "[[User:$username|$username]]: {{welcome}} ->{{subst:welcome}}", wpSave => "Save page", wpSection => "", wpEdittime => $editTime, wpEditToken => $editToken, wpMinoredit => "1", ] ); sleep 1; $count++; } } #go to Whatlinkshere/Template:Welcomeip and get the contents $flag = 0; $URL="http://".$WIKI_PATH."/w/index.php?title=Special:Whatlinkshere/Template:Welcomeip&limit=500&from=0"; $response=$browser->get($URL, @ns_headers); @content=split(/\n/, $response->as_string); foreach $tmp (@content) # process { if($count >= $MAX_COUNT) # max process count { last; } # find to string1 if($flag == 0 && $tmp =~ /$string1/) { $flag=1; } if($flag == 0) { next; } # if the template is included and is a user talk page if($tmp =~ /$string2/ && $tmp =~ /$string3/) { #go to the target page $tmp =~ /<a href=\"\/wiki\/([^\"]*)\"/; $pagename = $1; $URL="http://".$WIKI_PATH."/w/index.php?title=".$pagename."&action=edit"; $response=$browser->get($URL, @ns_headers); $content1=$response->as_string; # Get EditToken ($editToken) = ( $content1 =~ m/value\=\"([0-9a-f\\]*)\" name\=\"wpEditToken\"/ ); ($editTime) = ( $content1 =~ m/value\=\"([0-9a-f]*)\" name\=\"wpEdittime\"/ ); $filestartstr="<textarea tabindex='1' accesskey=\",\" name=\"wpTextbox1\" id=\"wpTextbox1\" rows='25'"; $fileendstr="</textarea>"; $filestart= index($content1, $filestartstr); $filestart+=92; $fileend= index($content1, $fileendstr); $content2=substr($content1, $filestart, $fileend-$filestart); #substitute $content2 =~ s/{{welcomeip}}/{{subst:welcomeip}}/gi; $response=$browser->post("http://".$WIKI_PATH."/w/index.php?title=".$pagename."&action=submit", @ns_headers, Content_Type=>'form-data',Content=> [ wpTextbox1 => $content2, wpSummary => "[[User:$username|$username]]: {{welcomeip}} ->{{subst:welcomeip}}", wpSave => "Save page", wpSection => "", wpEdittime => $editTime, wpEditToken => $editToken, wpMinoredit => "1", ] ); sleep 1; $count++; } }