X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=mubot4fb.pl;h=fba48b04fad517e7e8e245bfa8759d5b1bbcf24a;hb=0406aec4d234c5efe59dc113594de1d80bee9f98;hp=000acc3a5b0332462280f7781d73ba20fe4c1b83;hpb=b2d0fbff65986327ee43053a917afd41ba8ff106;p=mubot4fb%2Fmubot4fb.git diff --git a/mubot4fb.pl b/mubot4fb.pl index 000acc3..fba48b0 100755 --- a/mubot4fb.pl +++ b/mubot4fb.pl @@ -4,8 +4,10 @@ package Mubot4FB; 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'; @@ -91,7 +93,7 @@ sub _db_insert { 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); @@ -104,15 +106,17 @@ sub _db_insert { 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; @@ -141,6 +145,17 @@ sub _fb_post_uri { 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) = @_; @@ -197,29 +212,31 @@ sub _delete_prev { 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); @@ -257,7 +274,7 @@ sub said { 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 =~ /つぎ/) {