$agent->field('note_doctext');
####
$agent->field('note_doctext',$textarea);
####
use strict;
use warnings;
use XML::XPath;
use XML::LibXML;
use WWW::Mechanize;
use HTTP::Cookies;
use Data::Dumper;
use constant URL => 'http://www.perlmonks.org';
my $user_name = ;
my $user_id = ;
my $password = ;
my $search = 'onestary';
my $replace = 'onastery';
my $agent = login($user_name,$password);
my $raw_results = raw_search_results($agent,$user_name,$search);
my @link = get_links($raw_results);
replace($agent,$_,$search,$replace) for @link;
sub replace {
my ($agent,$link,$search,$replace) = @_;
$agent->get(URL . $link);
print STDERR "got $link ...";
my $textarea = get_textarea($agent->{content});
warn "no textarea for $link" and return unless $textarea;
$textarea =~ s/$search/$replace/g;
$agent->form(2);
$agent->field('note_doctext',$textarea);
$agent->click('sexisgood');
print STDERR "done!\n";
}
sub get_textarea {
my $html = shift;
my $dom = get_dom($html);
my @node = $dom->findvalue(q|//textarea[@name='note_doctext']|);
return $node[0];
}
sub get_links {
my $html = shift;
my $dom = get_dom($html);
my @link;
for ($dom->findnodes(q|//table[@width='100%']/tr/td/a|)) {
my $href = $_->getAttribute('href');
next unless $href;
my ($id) = $href =~ /(\d+)$/; $id ||= 0;
push @link, $href if $id > $user_id;
}
return @link;
}
sub get_dom { XML::LibXML->new->parse_html_string(shift) }
sub raw_search_results {
my ($agent,$author,$text) = @_;
# Super Search is node 3989
$agent->get(URL . '/index.pl?node_id=3989');
$agent->form(2);
$agent->field(@$_) for (
['BIT', $text], # search text
[qw(xa 0 1)], # include ...
['a', $author], # author
);
$agent->click('go');
print STDERR "got search results ...\n";
return $agent->{content};
}
sub login {
my ($user,$pass) = @_;
my $agent = WWW::Mechanize->new();
$agent->cookie_jar(HTTP::Cookies->new());
# Reviews is a fast loading page to login with
$agent->get(URL . '/index.pl?node_id=21144');
$agent->form(2);
$agent->field(@$_) for (
[qw(op login)],
['user', $user],
['passwd',$pass],
);
$agent->click('login');
print STDERR "logged in ...\n";
return $agent;
}