OSDN Git Service

delete fix ?
authorISHIKAWA Mutsumi <ishikawa@hanzubon.jp>
Wed, 17 Oct 2012 19:05:34 +0000 (04:05 +0900)
committerISHIKAWA Mutsumi <ishikawa@hanzubon.jp>
Wed, 17 Oct 2012 19:05:34 +0000 (04:05 +0900)
mubot4fb.pl

index 000acc3..fba48b0 100755 (executable)
@@ -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 =~ /つぎ/) {