前夜祭も終わり(僕の発表した件とかはまた後ほどポスト)、いよいよ明日(というか今日)から 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;