前夜祭も終わり(僕の発表した件とかはまた後ほどポスト)、いよいよ明日(というか今日)から YAPC::Asia 2009 開幕! てなわけでなにかと、Twitter上での YAPC に関する発言が気になったりする わけです。そこで、その状況が IRC 上でわかれば便利かと思い、 これまたコピペで AnyEvent::* を使ったボットを作ってみました。 ハッシュタグ「#yapc.asia2009」「#yapc」を Stream API からトラックして、発言があると その内容をほぼリアルタイムに IRC の yapc チャンネルに投稿します。 ソースはこちら。すっごく敏感でいい娘です♡
あ、ちなみに、前夜祭はトリを務めさせていただきましたが、 なんと明日YAPCほんちゃん1日目のLTでも最後にトークするっぽいので(しかも英語だよ!)、 2日連続トリということになります。なので、お願いいたします。 あ、弊社ワディットのトークも13:45からあるよ。こちらもよろしく!
#!/usr/bin/perl
use strict;
use AnyEvent::IRC::Client;
use AnyEvent::Twitter::Stream;
use Encode;
my $user = 'nanpaman';
my $password = 'hogehoge';
my $channel = '#yapc.asia-ja';
my $cv = AnyEvent->condvar;
my $pc = AnyEvent::IRC::Client->new;
$pc->reg_cb(
connect => sub {
my ( $pc, $err ) = @_;
if ( defined $err ) {
print "Couldn't connect to server: $err\n";
}
},
registered => sub {
my ($self) = @_;
print "registered!\n";
$pc->enable_ping(60);
},
disconnect => sub {
print "disconnected: $_[1]!\n";
}
);
$pc->send_srv( "JOIN", $channel );
$pc->send_chan( $channel, "NOTICE", $channel, "hi" );
$pc->connect( "irc.freenode.net", 6667,
{ nick => 'twitter_bot', user => 'twitter_bot', real => 'twitter_bot' } );
my $streamer = AnyEvent::Twitter::Stream->new(
username => $user,
password => $password,
method => 'filter',
track => '#yapcasia2009,#yapc',
on_tweet => sub {
my $tweet = shift;
$pc->send_chan( $channel, "NOTICE", $channel,
encode( 'utf8', "$tweet->{user}{screen_name}: $tweet->{text}" ) );
},
on_error => sub {
my $error = shift;
warn "ERROR: $error";
$cv->send;
},
on_eof => sub {
$cv->send;
},
);
$cv->recv;