Last active
December 18, 2015 15:19
-
-
Save CLCL/5803345 to your computer and use it in GitHub Desktop.
Adobe MAGIC MASTER( https://magic-master.jp/pc/index.html ) のTwitter連動で自動的に投稿されてしまったうざいメッセージを即座に消します。自分のアカウントで作ったTwitterアプリのConsumer Key、Access Tokenなどなどが必要。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
use version; our $VERSION = qv('0.0.1'); | |
use AnyEvent::Twitter::Stream; | |
use FindBin; | |
use File::Spec; | |
use Net::Twitter; | |
use utf8; | |
use YAML; | |
binmode STDOUT => ':utf8'; | |
my $my_screen_name ='CLCLCL'; | |
# AnyEvent リスナー設定(グローバル:お互いのイベントリスナー内部から操作する必要がある) | |
my $listener_twitter; # AnyEvent::Twitter::Streamのイベントリスナー | |
my $listener_timer; # AnyEventのTimerのイベントリスナー | |
my $set_timer; # $set_twitter内で$set_timerを書くのでここで宣言しておく必要がある | |
my $keys = YAML::LoadFile( File::Spec->catfile( $FindBin::RealBin, 'twitter_keys.yaml') ); | |
# 同じディレクトリにtwitter_keys.yaml ファイルを以下の形式で置いておく | |
# 同じディレクトリだとHTTPアクセスで鍵漏れするので、【HTTPでアクセスできないところに | |
# 置かなくてはならない】このサンプルはわかりやすさ優先のため同じディレクトリにおいている | |
# また.htaccessなどで一応HTTPで読み込めないよう指定をしているが設置者の自己責任で。 | |
# キーはTwitterにDevelopper登録して、自分で取得する必要がある。 | |
# "consumer_key" : 'aaaaaaaaaaaaaaaaaaa' | |
# "consumer_key_secret" : 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' | |
# "access_token" : 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' | |
# "access_token_secret" : 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy' | |
my $nt = Net::Twitter->new( | |
traits => [qw/API::RESTv1_1 WrapError/], | |
consumer_key => $keys->{consumer_key}, | |
consumer_secret => $keys->{consumer_key_secret}, | |
access_token => $keys->{access_token}, | |
access_token_secret => $keys->{access_token_secret}, | |
ssl => 1, | |
); | |
# AnyEvent のCondVar | |
my $cv = AE::cv; | |
# AnyEvent::Twitter::Streamの設定 | |
my $set_twitter = sub { | |
$listener_twitter = AnyEvent::Twitter::Stream->new( | |
consumer_key => $keys->{consumer_key}, | |
consumer_secret => $keys->{consumer_key_secret}, | |
token => $keys->{access_token}, | |
token_secret => $keys->{access_token_secret}, | |
method => 'userstream', # ユーザストリーム | |
on_tweet => sub { | |
my $tweet = shift; # $tweetはflagged utf8 | |
my $user = $tweet->{user}{screen_name}; | |
my $text = $tweet->{text} || ''; | |
my $lang = $tweet->{user}{lang} || ''; | |
return unless $user && $text; # たまに空のTweetが流れるのを防ぐ | |
return unless $user eq $my_screen_name; | |
return unless $tweet->{source} =~ m/MagicMaster/; | |
print "$tweet->{id}\n"; | |
$nt->destroy_status( $tweet->{id} ); | |
print $nt->http_message."\n"; | |
$text =~ s/[\x00-\x1f\x7f]//g; # コントロールコード除去 | |
$text =~ s/</</g; | |
$text =~ s/>/>/g; | |
print "$user : $text\n"; # コンソールに表示 | |
#my $dm = $nt->new_direct_message({ | |
# text => "迷惑なので消しました。$text", | |
# screen_name => 'adobestore_jp', | |
#}); | |
}, | |
# AnyEvent::Twitter::Stream 接続エラー | |
on_error => sub { | |
my $error = shift; | |
warn "ERROR: $error"; | |
undef $listener_twitter; # AnyEvent::Twitter::Streamのイベントリスナーいったん消去 | |
undef $listener_timer; # AnyEventのTimerイベントリスナーいったん消去 | |
$set_timer->(5); # AnyEventのTimerでAnyEvent::Twitter::Streamのイベントリスナー作り直す | |
}, | |
on_eof => sub { | |
}, | |
); | |
}; | |
# AnyEventのタイマーイベント(AnyEvent::Twitter::Streamの接続監視・再接続用) | |
# 引数の分だけ待ったあと、AnyEvent::Twitter::Streamのリスナーの存在監視をします。 | |
# AnyEvent::Twitter::Streamのリスナーでは接続が切れたとき、自身から再接続の手続 | |
# きが出来ないので、別のイベントリスナーが監視して再接続をします。 | |
# あらかじめ宣言する必要があったので、ここではmyを付けずに代入 | |
$set_timer = sub { | |
my $after = shift || 0; | |
$listener_timer = AnyEvent->timer( | |
after => $after, | |
interval => 10, | |
cb => sub { | |
unless ( $listener_twitter ) { | |
$set_twitter->(); | |
warn "AnyEvent_Timer:(re)connecting"; | |
} | |
}, | |
); | |
}; | |
$set_timer->(); | |
$cv->recv; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"consumer_key" : 'aaaaaaaaaaaaaaaaaaa' | |
"consumer_key_secret" : 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' | |
"access_token" : 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' | |
"access_token_secret" : 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment