Участник:Edwardspec TalkBot/copywlist.pl
Материал из Википедии — свободной энциклопедии
Следующий скрипт написан Эдуардом Черненко. Он копирует содержимое списка наблюдения одного аккаунта в настройки другого аккаунта. Требуемые параметры (изменить в тексте):
- $index
- путь к файлу index.php вики-движка
- $acc1
- имя аккаунта-источника
- $psw1
- пароль к аккаунту-источнику
- $acc2
- имя целевого аккаунта
- $psw2
- пароль с целевому аккаунту
Строки с именами пользователей и паролями должны быть записаны в кодировке UTF-8.
Внимание: список наблюдения целевого аккаунта не перезаписывается (то есть новые элементы будут просто добавляться к уже имеющимся). Если нужно затереть список наблюдения целевого аккаунта, сделайте это вручную до запуска скрипта.
#! /usr/bin/perl -w ### # CopyWList - MediaWiki script. # Copyright (C) 2006 Edward Chernenko. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. ### $VERSION = "1.0.0"; ### # # Configuration # our $index = "http://ru.wikipedia.org/w/index.php"; our $acc1 = "vasya1"; our $psw1 = "1aysav"; our $acc2 = "vasya2"; our $psw2 = "2aysav"; ### BEGIN { use LWP; use HTTP::Request::Common; } our $ua = LWP::UserAgent->new('cookie_jar' => { file => ".lwpcookies.txt", autosave => 1 }); login($acc1, $psw1); my $res = $ua->get("$index?title=Special:Watchlist/edit"); die "Can't download watchlist\n" unless $res->is_success; $res = $res->content; my @pages = (); while($res =~ /(?<=name=['"]id\[\]['"] value=['"]).*?(?=['"])/g) { push @pages, $&; } login($acc2, $psw2); foreach my $page(@pages) { watch_escaped($page); } sub login { my($user, $pass) = @_; my $res = $ua->request( POST "$index?title=Special:Userlogin&action=submitlogin", Content_Type => 'application/x-www-form-urlencoded', Content => [ ( 'wpName' => $user, 'wpPassword' => $pass, 'wpLoginattempt' => 'Log in' ) ] ); } sub watch_escaped { return $ua->get("$index?title=" . (shift) . "&action=watch")->is_success; }