User:FACBot/tfa.pl


 * 1) !/usr/bin/perl -w


 * 1) Handle the recent list in TFAs

use English; use strict; use utf8; use warnings;

use Carp; use Data::Dumper; use File::Basename qw(dirname); use File::Spec; use MediaWiki::Bot; use POSIX;

binmode (STDERR, ':utf8'); binmode (STDOUT, ':utf8');

my $editor = MediaWiki::Bot->new ({      host        => 'en.wikipedia.org',        protocol     => 'https', }) or die "new MediaWiki::Bot failed";

my $dirname = dirname (__FILE__, '.pl'); push @INC, $dirname; require Cred; my $cred = new Cred ; my $log = $cred->log;

sub error_exit ($) { my @message = @ARG; if ($editor->{error}->{code}) { push @message, ' (', $editor->{error}->{code}, ') : ', $editor->{error}->{details}; }   croak @message; }

sub date ($) { my ($day) = @ARG; my $date = strftime ("%B %d, %Y", gmtime ($day)); $date =~ s/ 0/ /; # Get rid of the space return $date; }

my %tfa; my $today = time ; my $one_day = 24 * 60 * 60; my $three_days_ago = $today - 3 * $one_day;

$editor->login ({   username => $cred->user,    password => $cred->password }) or error_exit ('login failed');

for (my $day = $today + 60 * $one_day; $day > $three_days_ago; $day -= $one_day) { my $date = date ($day); my $tfa = "Wikipedia:Today's featured article/$date"; my $text = $editor->get_text ($tfa) or       next; my ($article) = $text =~ /\[\[(.+)\]\]/; $tfa{$date} = $article; }

for (my $day = $today + 60 * $one_day; $day > $today; $day -= $one_day) { my $this_day = date ($day); my $tfa = "Wikipedia:Today's featured article/$date"; my $text = $editor->get_text ($tfa) or       error_exit ("unable to fetch $tfa"); my @matches = $text =~ /(\[\[\]\])/g; my $matches = scalar @matches; next DAY unless $matches == 3;

for my $prev (1..3) { my $prev_date = date($day - $prev * $one_day); my $prev_tfa = $tfa{$prev_date}; next DAY unless defined $prev_tfa; $text =~ s/\[\[\]\]/$prev_tfa/; }

$editor->edit ({       page => $tfa,        text => $text,        summary => 'update recently featured list',        minor => 0,    }) or        error_exit ("unable to edit '$tfa'"); }

exit 0;