User:AnomieBOT/source/tasks/PageMover.pm
Appearance
Approved 2009-12-13, Completed 2009-12-14 Wikipedia:Bots/Requests for approval/AnomieBOT 35 |
package tasks::PageMover;
=pod
=begin metadata
Bot: AnomieBOT
Task: PageMover
BRFA: Wikipedia:Bots/Requests for approval/AnomieBOT 35
Status: Completed 2009-12-14
Created: 2009-10-31
Move date articles (e.g. [[February 12, 2005]]) in [[:Category:Days in 2003]]
and [[:Category:Days in 2005]] from article space to subpages of
[[Portal:Current events]].
=end metadata
=cut
use utf8;
use strict;
use Data::Dumper;
use POSIX;
use URI::Escape;
use AnomieBOT::Task;
use vars qw/@ISA/;
@ISA=qw/AnomieBOT::Task/;
sub new {
my $class=shift;
my $self=$class->SUPER::new();
bless $self, $class;
return $self;
}
=pod
=for info
Approved 2009-12-13, Completed 2009-12-14<br />[[Wikipedia:Bots/Requests for approval/AnomieBOT 35]]
=cut
sub approved {
return -1;
}
sub run {
my ($self, $api)=@_;
my $res;
$api->task('PageMover',0,10,qw/d::Redirects/);
my $re=$api->redirect_regex();
my $iter=$api->iterator(
list => 'categorymembers',
cmtitle => ['Category:Days in 2003','Category:Days in 2005'],
cmnamespace => 0,
cmtype => 'page',
cmlimit => 'max',
);
my $maybedone=1;
my $endtime=time()+300;
while(my $page=$iter->next){
my $title=$page->{'title'};
next unless $title=~/^(\S+ \d+), (\d+)$/;
my $newtitle="Portal:Current events/$2 $1";
my $tok=$api->movetoken($title, EditRedir=>1);
if($tok->{'code'} eq 'shutoff'){
$api->warn("Task disabled: ".$tok->{'content'}."\n");
return 300;
}
if($tok->{'code'} ne 'success'){
$api->warn("Failed to get move token for $title: ".$tok->{'error'}."\n");
next;
}
next if exists($tok->{'redirect'});
$api->log("Moving $title to $newtitle");
$res=$api->move($tok, $newtitle, "Moving $title to $newtitle per [[User:AnomieBOT/req/Current events date move|request]]", 1, 0);
if($res->{'code'} ne 'success'){
$api->warn("Failed to move $title: ".$res->{'error'}."\n");
$maybedone=0;
next;
}
if(time()>$endtime){ $maybedone=0; last; }
}
$api->log("PageMover may be DONE!") if $maybedone;
# Check again in 10 minutes.
return 600;
}
1;