X-Git-Url: http://lab.mitty.jp/git/?a=blobdiff_plain;f=twitter%2Ftwitterbot.pl;h=406ee128f4ca5a883417a86dc12db8896903dafe;hb=e1132d93be19e858e374644d81e8fc28d09e2954;hp=575ca6589c5d304ad18d55e43e117e629f470aae;hpb=f72bb76606e0285df3df349a477cb6c0de479972;p=lab.git diff --git a/twitter/twitterbot.pl b/twitter/twitterbot.pl index 575ca65..406ee12 100755 --- a/twitter/twitterbot.pl +++ b/twitter/twitterbot.pl @@ -12,9 +12,11 @@ use utf8; use Net::Twitter::Lite; use FindBin qw($Bin); use YAML::Tiny; +use Date::Parse qw(str2time); -sub VERBOSE () { $ARGV[0] eq 'verbose' }; -sub DEBUG () { VERBOSE or $ARGV[0] eq 'debug' }; +my $_execmode = $ARGV[0] || 0; +sub VERBOSE () { $_execmode eq 'verbose' }; +sub DEBUG () { VERBOSE or $_execmode eq 'debug' }; use Data::Dumper; DEBUG and warn "$0: debug mode"; @@ -33,31 +35,29 @@ if (! $bot->authorized) { die "$0: this client is not yet authorized.\n"; } -my %tweets; -my $tweet; - -$tweet = or_search($bot, $conf->{hashtag}, $stat->{search}); -if ($tweet) { - %tweets = (%tweets, %$tweet); -} - -$tweet = mentions_ids($bot, $stat->{mention}); -if ($tweet) { - %tweets = (%tweets, %$tweet); -} - -foreach my $id (sort keys %tweets) { - if ($tweets{$id} eq 'retweet') { +my $tweets = {}; +%$tweets = ( + %$tweets, + %{ or_search($bot, $conf->{hashtag}, $stat->{search}) } +); +%$tweets = ( + %$tweets, + %{ mentions_ids($bot, $stat->{mention}) } +); + +foreach my $id (sort keys %$tweets) { + # $tweets->{$id}{type} eq 'search' => found by search API + # eq 'mention' => found by mention API + if ($tweets->{$id}{type} eq 'retweet') { next; } DEBUG or sleep($conf->{sleep}); - # retweet found tweet - # $tweets->{$id} eq 'search' => found by search API - # eq 'mention' => found by mention API + + # do retweet found tweets my $res; eval { DEBUG or $res = $bot->retweet($id); - DEBUG and warn "retweet($id) => ", Dumper($tweets{$id}); + DEBUG and warn "retweet($id) => ", Dumper($tweets->{$id}); }; if ($@) { evalrescue($@); @@ -65,10 +65,10 @@ foreach my $id (sort keys %tweets) { next; } - $stat->{$tweets{$id}} = $id; + $stat->{$tweets->{$id}{type}} = $id; } -if (%tweets) { +if ($tweets) { # save last status to yaml file DEBUG or YAML::Tiny::DumpFile("$Bin/status.yml", $stat); DEBUG and warn "status.yml => ", Dumper($stat); @@ -141,17 +141,27 @@ sub or_search { } ); } + VERBOSE and warn Dumper($res); if ($res->{results}) { - VERBOSE and warn Dumper($res->{results}); foreach my $tweet (@{$res->{results}}) { my $res = $bot->show_status($tweet->{id}); + VERBOSE and warn Dumper($res); + + my $id = { + date => str2time($res->{created_at}), + screen_name => $res->{user}{screen_name}, + status_id => $res->{id}, + text => $res->{text}, + user_id => $res->{user}{id}, + }; if ($res->{retweeted_status}) { - $ids->{$tweet->{id}} = 'retweet'; + $id->{retweet_of} = $res->{retweeted_status}{id}; + $id->{type} = 'retweet'; } else { - $ids->{$tweet->{id}} = 'search'; + $id->{type} = 'search'; } - VERBOSE and warn Dumper($res); + $ids->{$tweet->{id}} = $id; } } }; @@ -188,7 +198,16 @@ sub mentions_ids { my $ids = {}; if ($res && @{$res}) { $ids = { - map { $_->{id} => 'mention' } @{$res} + map { + $_->{id} => { + date => str2time($_->{created_at}), + screen_name => $_->{user}{screen_name}, + status_id => $_->{id}, + text => $_->{text}, + type => 'mention', + user_id => $_->{user}{id}, + } + } @{$res} }; }