BBS-DiscuzX2
view release on metacpan or search on metacpan
lib/BBS/DiscuzX2.pm view on Meta::CPAN
=cut
use strict;
use warnings;
package BBS::DiscuzX2;
use Moo;
use BBS::DiscuzX2::DB;
use WWW::Mechanize;
our $VERSION =0.01;
sub init_browser {
my ($self, %opt) = @_;
$self->{browser} = WWW::Mechanize->new(autocheck=>0);
while(my ($k, $v) = each %opt){
$self->{browser}->add_header($k => $v);
}
$self;
}
sub login {
my ($self, %opt) = @_;
$self->{browser}->add_header('Referer' => $opt{site});
my $url = $opt{site}.'member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1';
my $data = [
username=>$opt{user},
password=>$opt{passwd},
fastloginfield=>'username',
quickforward=>'yes',
handlekey=>'ls',
];
my $res = $self->{browser}->post($url, $data);
return unless($res->is_success);
$self->{site} = $opt{site};
$res = $self->{browser}->get($opt{site}.'forum.php');
return unless($res->is_success);
($self->{formhash}) = $res->decoded_content =~ m/formhash=(\w+)">/s;
return 1;
}
sub post_thread {
my ($self, $data) = @_;
my $url = "$self->{site}forum.php?mod=post&action=newthread&fid=$data->{fid}&extra=&topicsubmit=yes";
my $res = $self->{browser}->post($url,
[
'formhash' => $self->{formhash},
'message' => $data->{message},
'subject' => $data->{subject},
'usesig' => $data->{use_sig} // 1,
'allownoticeauthor' => $data->{notice_author} // 1,
'wysiwyg' => '1',
'newalbum' => '',
'posttime' => '',
'save' => '',
'uploadalbum' => '',
],
);
return unless($res->is_success);
my ($tid, $pid) = $res->as_string =~ m[action=edit&fid=\d+&tid=(\d+)&pid=(\d+)&]s;
return {
tid => $tid,
pid => $pid,
response => $res,
};
}
#sub append_thread {
# my ($self, $data) = @_;
# my $url = "$self->{site}forum.php?mod=misc&action=postappend&tid=$data->{tid}&pid=$data->{pid}&extra=&postappendsubmit=yes&infloat=yes";
# my $res = $self->{browser}->post($url,
# [
# 'formhash' => $self->{formhash},
# 'postappendmessage' => $data->{message},
# 'handlekey' => 'postappend',
# ],
# );
#
# return unless($res->is_success);
# return $res;
#}
sub delete_thread {
my ($self, $data) = @_;
my $url = "$self->{site}forum.php?mod=post&action=edit&extra=&editsubmit=yes";
my $referer = "$self->{site}forum.php?mod=post&action=edit&fid=$data->{fid}&tid=$data->{tid}&pid=$data->{pid}&page=1";
$self->{browser}->add_header('Referer' => $referer);
my $res = $self->{browser}->post($url,
[
fid => $data->{fid},
tid => $data->{tid},
pid => $data->{pid},
formhash => $self->{formhash},
allownoticeauthor => $data->{notice_author} // 1,
delattachop => $data->{del_attach} || 0,
delete => 1,
],
);
return unless($res->is_success);
return 1;
}
sub init_db_handler {
my ($self, %db_opt) = @_;
$db_opt{db_port} ||= 3306;
my $dsn = "DBI:mysql:host=$db_opt{db_host};port=$db_opt{db_port};database=$db_opt{db_name}";
$self->{db_handler} = BBS::DiscuzX2::DB->new(
connect_info => [ $dsn, $db_opt{db_user}, $db_opt{db_passwd} ]
);
if($db_opt{db_charset}){
$self->{db_handler}->do("SET character_set_client='$db_opt{db_charset}'");
( run in 0.649 second using v1.01-cache-2.11-cpan-b16cb0d3907 )