Approved 2009-06-19, completed 2009-06-20 Wikipedia:Bots/Requests for approval/AnomieBOT 32 |
package tasks::PageCreator;
=pod
=begin metadata
Bot: AnomieBOT
Task: PageCreator
BRFA: Wikipedia:Bots/Requests for approval/AnomieBOT 32
Status: Completed 2009-06-20
Created: 2009-06-19
OnDemand: true
Create redirects from isotopes for [[WP:WikiProject Elements]].
=end metadata
=cut
use utf8;
use strict;
use AnomieBOT::Task;
use Data::Dumper;
use vars qw/@ISA/;
@ISA=qw/AnomieBOT::Task/;
my $req="[[User:AnomieBOT/req/WikiProject Elements 1|request]]";
my %elements=(
'Scandium' => 36, 60 ],
'Titanium' => 38, 63 ],
'Vanadium' => 40, 65 ],
'Chromium' => 42, 67 ],
'Manganese' => 44, 69 ],
'Iron' => 45, 72 ],
'Cobalt' => 47, 75 ],
'Nickel' => 48, 78 ],
'Copper' => 52, 80 ],
'Zinc' => 54, 83 ],
'Gallium' => 56, 86 ],
'Germanium' => 58, 89 ],
'Arsenic' => 60, 92 ],
'Selenium' => 65, 94 ],
'Bromine' => 67, 97 ],
'Krypton' => 69, 100 ],
'Rubidium' => 71, 102 ],
'Strontium' => 73, 105 ],
'Yttrium' => 76, 108 ],
'Zirconium' => 78, 110 ],
'Niobium' => 81, 113 ],
'Molybdenum' => 83, 115 ],
'Technetium' => 85, 118 ],
'Ruthenium' => 87, 120 ],
'Rhodium' => 89, 122 ],
'Palladium' => 91, 124 ],
'Silver' => 93, 130 ],
'Cadmium' => 95, 132 ],
'Indium' => 97, 135 ],
'Tin' => 99, 137 ],
'Antimony' => 103, 139 ],
'Tellurium' => 105, 142 ],
'Iodine' => 108, 144 ],
'Xenon' => 110, 147 ],
'Caesium' => 112, 151 ],
'Barium' => 114, 153 ],
'Lanthanum' => 117, 155 ],
'Cerium' => 119, 157 ],
'Praseodymium' => 121, 159 ],
'Neodymium' => 124, 161 ],
'Promethium' => 126, 163 ],
'Samarium' => 128, 165 ],
'Europium' => 130, 167 ],
'Gadolinium' => 134, 169 ],
'Terbium' => 135, 171 ],
'Dysprosium' => 138, 173 ],
'Holmium' => 140, 175 ],
'Erbium' => 143, 177 ],
'Thulium' => 145, 179 ],
'Ytterbium' => 148, 181 ],
'Lutetium' => 150, 184 ],
'Hafnium' => 153, 188 ],
'Tantalum' => 155, 190 ],
'Tungsten' => 158, 192 ],
'Rhenium' => 160, 194 ],
'Osmium' => 162, 197 ],
'Iridium' => 164, 199 ],
'Platinum' => 166, 202 ],
'Gold' => 169, 205 ],
'Mercury' => 171, 210 ],
'Thallium' => 176, 212 ],
'Lead' => 178, 215 ],
'Bismuth' => 184, 218 ],
'Polonium' => 188, 220 ],
'Astatine' => 191, 223 ],
'Radon' => 195, 228 ],
'Francium' => 199, 232 ],
'Radium' => 202, 234 ],
'Actinium' => 206, 236 ],
'Thorium' => 209, 238 ],
'Protactinium' => 212, 240 ],
'Uranium' => 217, 242 ],
'Neptunium' => 225, 244 ],
'Plutonium' => 228, 247 ],
'Americium' => 231, 249 ],
'Curium' => 232, 252 ],
'Berkelium' => 235, 254 ],
'Californium' => 237, 256 ],
'Einsteinium' => 240, 258 ],
'Fermium' => 242, 260 ],
'Mendelevium' => 245, 262 ],
'Nobelium' => 248, 264 ],
'Lawrencium' => 251, 266 ],
'Rutherfordium' => 253, 268 ],
'Dubnium' => 255, 270 ],
'Seaborgium' => 258, 273 ],
'Bohrium' => 260, 275 ],
'Hassium' => 263, 277 ],
'Meitnerium' => 265, 279 ],
'Darmstadtium' => 267, 281 ],
'Roentgenium' => 272, 283 ],
'Ununbium' => 277, 285 ],
'Ununtrium' => 278, 287 ],
'Ununquadium' => 285, 289 ],
'Ununpentium' => 287, 291 ],
'Ununhexium' => 289, 293 ],
'Ununseptium' => 291, 292 ],
'Ununoctium' => 293, 294 ],
);
sub new {
my $class=shift;
my $self=$class->SUPER::new();
bless $self, $class;
return $self;
}
=pod
=for info
Approved 2009-06-19, completed 2009-06-20<br />[[Wikipedia:Bots/Requests for approval/AnomieBOT 32]]
=cut
sub approved {
return -1;
}
sub run {
my ($self, $api)=@_;
my $res;
$api->task('PageCreator', 0, 10, qw//);
# Spend a max of 5 minutes on this task before restarting
my $endtime=time()+300;
while(my ($element,$range)=each %elements){
my $l=length($range->1]);
for(my $iso=$range->0]; $iso<=$range->1]; $iso++){
my $title="$element-$iso";
next if exists($api->store->{$title});
my $redir="Isotopes of ".lc($element)."#$element-$iso";
my $page=sprintf("#REDIRECT [[Isotopes of %s#%s-%d]]\n\n[[Category:Isotopes of %s|%s-%0*d]]", lc($element), $element, $iso, lc($element), $element, $l, $iso);
# Ok, check the page
my $tok=$api->edittoken($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 edit token for $title: ".$tok->{'error'}."\n");
next;
}
if(!exists($tok->{'missing'})){
$api->log("$title already exists, skipping");
$api->store->{$title}=1;
next;
}
# Create page
my $summary="Creating redirect per $req";
$api->log("$summary in $title");
my $r=$api->($tok, $page, $summary, 0, 1);
if($r->{'code'} ne 'success'){
$api->warn("Write failed on $title: ".$r->{'error'}."\n");
next;
}
$api->store->{$title}=1;
# If we've been at it long enough, let another task have a go.
return 0 if time()>=$endtime;
}
}
return 600;
}
1;
Approved 2009-06-19, completed 2009-06-20 Wikipedia:Bots/Requests for approval/AnomieBOT 32 |
package tasks::PageCreator;
=pod
=begin metadata
Bot: AnomieBOT
Task: PageCreator
BRFA: Wikipedia:Bots/Requests for approval/AnomieBOT 32
Status: Completed 2009-06-20
Created: 2009-06-19
OnDemand: true
Create redirects from isotopes for [[WP:WikiProject Elements]].
=end metadata
=cut
use utf8;
use strict;
use AnomieBOT::Task;
use Data::Dumper;
use vars qw/@ISA/;
@ISA=qw/AnomieBOT::Task/;
my $req="[[User:AnomieBOT/req/WikiProject Elements 1|request]]";
my %elements=(
'Scandium' => 36, 60 ],
'Titanium' => 38, 63 ],
'Vanadium' => 40, 65 ],
'Chromium' => 42, 67 ],
'Manganese' => 44, 69 ],
'Iron' => 45, 72 ],
'Cobalt' => 47, 75 ],
'Nickel' => 48, 78 ],
'Copper' => 52, 80 ],
'Zinc' => 54, 83 ],
'Gallium' => 56, 86 ],
'Germanium' => 58, 89 ],
'Arsenic' => 60, 92 ],
'Selenium' => 65, 94 ],
'Bromine' => 67, 97 ],
'Krypton' => 69, 100 ],
'Rubidium' => 71, 102 ],
'Strontium' => 73, 105 ],
'Yttrium' => 76, 108 ],
'Zirconium' => 78, 110 ],
'Niobium' => 81, 113 ],
'Molybdenum' => 83, 115 ],
'Technetium' => 85, 118 ],
'Ruthenium' => 87, 120 ],
'Rhodium' => 89, 122 ],
'Palladium' => 91, 124 ],
'Silver' => 93, 130 ],
'Cadmium' => 95, 132 ],
'Indium' => 97, 135 ],
'Tin' => 99, 137 ],
'Antimony' => 103, 139 ],
'Tellurium' => 105, 142 ],
'Iodine' => 108, 144 ],
'Xenon' => 110, 147 ],
'Caesium' => 112, 151 ],
'Barium' => 114, 153 ],
'Lanthanum' => 117, 155 ],
'Cerium' => 119, 157 ],
'Praseodymium' => 121, 159 ],
'Neodymium' => 124, 161 ],
'Promethium' => 126, 163 ],
'Samarium' => 128, 165 ],
'Europium' => 130, 167 ],
'Gadolinium' => 134, 169 ],
'Terbium' => 135, 171 ],
'Dysprosium' => 138, 173 ],
'Holmium' => 140, 175 ],
'Erbium' => 143, 177 ],
'Thulium' => 145, 179 ],
'Ytterbium' => 148, 181 ],
'Lutetium' => 150, 184 ],
'Hafnium' => 153, 188 ],
'Tantalum' => 155, 190 ],
'Tungsten' => 158, 192 ],
'Rhenium' => 160, 194 ],
'Osmium' => 162, 197 ],
'Iridium' => 164, 199 ],
'Platinum' => 166, 202 ],
'Gold' => 169, 205 ],
'Mercury' => 171, 210 ],
'Thallium' => 176, 212 ],
'Lead' => 178, 215 ],
'Bismuth' => 184, 218 ],
'Polonium' => 188, 220 ],
'Astatine' => 191, 223 ],
'Radon' => 195, 228 ],
'Francium' => 199, 232 ],
'Radium' => 202, 234 ],
'Actinium' => 206, 236 ],
'Thorium' => 209, 238 ],
'Protactinium' => 212, 240 ],
'Uranium' => 217, 242 ],
'Neptunium' => 225, 244 ],
'Plutonium' => 228, 247 ],
'Americium' => 231, 249 ],
'Curium' => 232, 252 ],
'Berkelium' => 235, 254 ],
'Californium' => 237, 256 ],
'Einsteinium' => 240, 258 ],
'Fermium' => 242, 260 ],
'Mendelevium' => 245, 262 ],
'Nobelium' => 248, 264 ],
'Lawrencium' => 251, 266 ],
'Rutherfordium' => 253, 268 ],
'Dubnium' => 255, 270 ],
'Seaborgium' => 258, 273 ],
'Bohrium' => 260, 275 ],
'Hassium' => 263, 277 ],
'Meitnerium' => 265, 279 ],
'Darmstadtium' => 267, 281 ],
'Roentgenium' => 272, 283 ],
'Ununbium' => 277, 285 ],
'Ununtrium' => 278, 287 ],
'Ununquadium' => 285, 289 ],
'Ununpentium' => 287, 291 ],
'Ununhexium' => 289, 293 ],
'Ununseptium' => 291, 292 ],
'Ununoctium' => 293, 294 ],
);
sub new {
my $class=shift;
my $self=$class->SUPER::new();
bless $self, $class;
return $self;
}
=pod
=for info
Approved 2009-06-19, completed 2009-06-20<br />[[Wikipedia:Bots/Requests for approval/AnomieBOT 32]]
=cut
sub approved {
return -1;
}
sub run {
my ($self, $api)=@_;
my $res;
$api->task('PageCreator', 0, 10, qw//);
# Spend a max of 5 minutes on this task before restarting
my $endtime=time()+300;
while(my ($element,$range)=each %elements){
my $l=length($range->1]);
for(my $iso=$range->0]; $iso<=$range->1]; $iso++){
my $title="$element-$iso";
next if exists($api->store->{$title});
my $redir="Isotopes of ".lc($element)."#$element-$iso";
my $page=sprintf("#REDIRECT [[Isotopes of %s#%s-%d]]\n\n[[Category:Isotopes of %s|%s-%0*d]]", lc($element), $element, $iso, lc($element), $element, $l, $iso);
# Ok, check the page
my $tok=$api->edittoken($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 edit token for $title: ".$tok->{'error'}."\n");
next;
}
if(!exists($tok->{'missing'})){
$api->log("$title already exists, skipping");
$api->store->{$title}=1;
next;
}
# Create page
my $summary="Creating redirect per $req";
$api->log("$summary in $title");
my $r=$api->($tok, $page, $summary, 0, 1);
if($r->{'code'} ne 'success'){
$api->warn("Write failed on $title: ".$r->{'error'}."\n");
next;
}
$api->store->{$title}=1;
# If we've been at it long enough, let another task have a go.
return 0 if time()>=$endtime;
}
}
return 600;
}
1;