Content deleted Content added
Updating published sources: BAGBot: * Rename "Last edit" columns to "Last editor" per request |
Updating published sources: TFATitleSubpageCreator: * Canonicalize page names |
||
Line 85: | Line 85: | ||
} |
} |
||
my $link=$1; |
my $link=$1; |
||
# Ask MediaWiki to canonicalize the title for us, because the actual |
|||
# normalization can depend on various factors. |
|||
my $res=$api->query(titles=>$link); |
|||
if($res->{'code'} ne 'success'){ |
|||
$api->warn("Failed to get canonical name for $link: ".$res->{'error'}."\n"); |
|||
next; |
|||
} |
|||
$link=$res->{'query'}{'normalized'}[0]{'to'} // $link; |
|||
# Ok, check the page |
# Ok, check the page |
Revision as of 20:16, 16 June 2010
package tasks::TFATitleSubpageCreator;
=pod
=begin metadata
Bot: AnomieBOT II
Task: TFATitleSubpageCreator
BRFA: Wikipedia:Bots/Requests for approval/AnomieBOT II
Status: Approved 2010-05-31
Rate: Max 6 edits/minute
Created: 2010-05-26
Fill in the daily subpages of [[Template:TFA title]] with the title of each day's featured article.
=end metadata
=cut
use utf8;
use strict;
use POSIX;
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 2010-05-31<br />[[Wikipedia:Bots/Requests for approval/AnomieBOT II]]
=cut
sub approved {
return 200;
}
sub run {
my ($self, $api)=@_;
my $res;
$api->task('TFATitleSubpageCreator', 0, 10, qw//);
my @titles=();
my @t=gmtime();
@t=@t[3..5];
for(my $i=0; $i<7; $i++){
push @titles, "Wikipedia:Today's featured article/".POSIX::strftime("%B %-d, %Y", gmtime POSIX::mktime(0,0,0,$t[0]+$i,$t[1],$t[2]));
}
my $iter=$api->iterator(
titles => join('|',@titles),
prop => 'revisions',
rvprop => 'content',
);
while($_=$iter->next){
return 0 if $api->halting;
if(!$_->{'_ok_'}){
$api->warn("Failed to retrieve pages: ".$_->{'error'}."\n");
return 60;
}
next if exists($_->{'missing'});
next if $_->{'revisions'}[0]{'*'}=~/{{TFAempty}}/;
my $title=$_->{'title'};
my $date=$title; $date=~s/Wikipedia:Today\x27s featured article\///;
my $template="Template:TFA title/$date";
unless($_->{'revisions'}[0]{'*'}=~/'''\s*\[\[\s*([^|\]]+?)\s*(?:\|[^]]+)?\]\]\s*'''/ || $_->{'revisions'}[0]{'*'}=~m!<b>\s*\[\[\s*([^|\]]+?)\s*(?:\|[^]]+)?\]\]\s*</b>!){
$api->warn("No FA link in $title?\n");
warn $_->{'revisions'}[0]{'*'};
next;
}
my $link=$1;
# Ask MediaWiki to canonicalize the title for us, because the actual
# normalization can depend on various factors.
my $res=$api->query(titles=>$link);
if($res->{'code'} ne 'success'){
$api->warn("Failed to get canonical name for $link: ".$res->{'error'}."\n");
next;
}
$link=$res->{'query'}{'normalized'}[0]{'to'} // $link;
# Ok, check the page
my $tok=$api->edittoken($template, 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 edit token for $template: ".$tok->{'error'}."\n");
next;
}
# Need to edit?
if(($tok->{'revisions'}[0]{'*'} // '') ne $link){
$api->log("Featured article for [[$title|$date]] is [[$link]] for $template");
my $r=$api->edit($tok, $link, "Featured article for [[$title|$date]] is [[$link]]", 1, 1);
if($r->{'code'} ne 'success'){
$api->warn("Write failed on $template: ".$r->{'error'}."\n");
next;
}
}
}
# Ok, done. Run once at 11pm (UTC) and again right at midnight, and
# otherwise every 6 hours.
my $tt=time()%86400;
my $t=82800-$tt;
$t=86400-$tt if $t<0;
$t=6*3600 if $t>6*3600;
return $t;
}
1;