use strict;
use utf8;
-use Facebook::Graph;
use base 'Bot::BasicBot';
+use Facebook::Graph;
+use LWP::UserAgent;
+use HTTP::Request::Common;
use Encode;
use DBI qw/:sql_types/;
use POSIX 'strftime';
my $sth = $me->{dbh}->prepare("insert into posts (submitter, fb_post_id, uri, prefix, suffix, post_time) values (?, ?, ?, ?, ?, ?)");
$sth->bind_param(1, $db_args->{submitter}, SQL_VARCHAR);
- $sth->bind_param(2, $db_args->{fb_post_id}, SQL_INTEGER);
+ $sth->bind_param(2, $db_args->{fb_post_id}, SQL_BIGINT);
$sth->bind_param(3, $db_args->{uri}, SQL_VARCHAR);
$sth->bind_param(4, $db_args->{prefix}, SQL_VARCHAR);
$sth->bind_param(5, $db_args->{suffix}, SQL_VARCHAR);
sub _db_delete {
my ($me, $db_args) = @_;
- $db_args->{submitter_type} = 1 unless defined $db_args->{submitter_type};
+ $db_args->{submitter_type} ||= 1;
my $sth = $me->{dbh}->prepare("delete from posts where fb_post_id = ? and submitter = ? and submitter_type = ?");
-
- $sth->bind_param(1, $db_args->{fb_post_id}, SQL_INTEGER);
+ warn $db_args->{fb_post_id};
+ warn $db_args->{submitter};
+ warn $db_args->{submitter_type};
+ $sth->bind_param(1, $db_args->{fb_post_id}, SQL_BIGINT);
$sth->bind_param(2, $db_args->{submitter}, SQL_VARCHAR);
$sth->bind_param(3, $db_args->{submitter_type}, SQL_INTEGER);
my $rv = $sth->execute();
-
+ warn $rv;
my $ret = $rv ? $sth->rows : 0;
$sth->finish;
return $me->{cfg}->{fb_page_url} . 'posts/' . $post_id;
}
+sub _fb_delete {
+ my ($me, $post_id) = @_;
+
+ my $req = HTTP::Request::Common::DELETE($me->_fb_post_uri($post_id));
+ $req->header('Content-Length', 0);
+ my $resp;
+ eval{$resp = LWP::UserAgent->new->request($req)};
+ warn $resp;
+ return !$@;
+}
+
sub _format_submit {
my ($me, $e) = @_;
return _not_yet();
}
-sub _delete_post_id {
- my ($me, $args) = @_;
-
- return _not_yet();
-}
-
sub _delete {
my ($me, $args, $post_id) =@_;
+ my $resp_msg;
$me->{dbh}->begin_work;
- if ($me->_db_delete(fb_post_id => $post_id, submitter => $args->{who})) {
+ if ($me->_db_delete({fb_post_id => $post_id, submitter => $args->{who}})) {
# fb 側のエントリを削除しないといけない
- $me->{dbh}->commit;
+ if ($me->_fb_delete($post_id)) {
+ $me->{dbh}->commit;
+ $resp_msg = $args->{who} . ': 削除しました ' . $me->_fb_post_uri($post_id);
+ } else {
+ $resp_msg = 'fail to delete facebook post: ' . $me->_fb_post_uri($post_id);
+ $me->{dbh}->rollback;
+ }
} else {
+ $resp_msg = 'fail to delete facebook post from DB: ' . $me->_fb_post_uri($post_id);
$me->{dbh}->rollback;
}
- return _not_yet();
+ return $resp_msg;
}
sub _search_start {
my ($me, $args) = @_;
- if ($args->{body} =~ /^ふみくん (.+)\?$/) {
+ if ($args->{body} =~ /^ふみくん\s+(.+)\?\s*$/) {
$me->{last_search}->{$args->{who}} = undef;
$me->{last_search}->{$args->{who}} = $me->_db_search($1);
return $me->_search_next($args);
if ($cmd eq 'いまのなし') {
$resp_msg = $me->_delete_prev($args);
} elsif ($cmd =~ /削除\s+(?:$me->{cfg}->{fb_page_url}posts\/)?([0-9]+)$/) {
- $resp_msg = $me->_delete_post_id($args, $1);
+ $resp_msg = $me->_delete($args, $1);
} elsif ($cmd =~ /\?$/) {
$resp_msg = $me->_search_start($args);
} elsif ($cmd =~ /つぎ/) {