AnyEvent::Twitter::Stream の素敵さを今更ながら実感してみる

2011年9月26日

AnyEvent::Twitter::Stream が 一般公開された User Streams API に対応というネタを見たので、サンプル書いてみました。

といっても、ほとんど、AnyEvent::Twitter::StreamでDesktop Notify – すぎゃーんメモ のコードを使ったようなものですが。

ハッシュタグ #oreimo にヒットした行をコマンドラインに出力するようにしてるのは、ちょうど TL で俺妹の実況がされていたから。Windows 上で実行しているので、文字コードは sjis にしてから print してます。

うーん、思った以上に簡単に UserStream が利用できますね。AnyEvent::Twitter を使えば TL へのポストも可能なようで、bot の TL 取得部分をこの処理に変えると、最速で反応することもできるんだろうなあ。

#!/usr/bin/perl
use strict;
use AnyEvent::Twitter;
use AnyEvent::Twitter::Stream;
use Encode;
use utf8;
my $cv = AE::cv;

my $twitty = AnyEvent::Twitter->new(
consumer_key        => $consumer_key,
consumer_secret     => $consumer_secret,
access_token        => $access_token,
access_token_secret => $access_token_secret,
);
my $done = AnyEvent->condvar;
my $listener = AnyEvent::Twitter::Stream->new(
consumer_key        => $consumer_key,
consumer_secret     => $consumer_secret,
token               => $access_token,
token_secret        => $access_token_secret,
method          => "userstream",
on_tweet        => sub {
my $tweet = shift;

my $user = $tweet->{user}{screen_name};
my $text = ($tweet->{text} || '');
return unless $user && $text;
if ($text=~/#oreimo/) {print '#oreimo'.encode("sjis",$text);}
},
on_error => sub {
my $error = shift;
warn "ERROR: $error";
$done->send;
},
on_eof   => sub {
$done->send;
},
);
$cv->recv;