- 2009/9/10 木曜日 23:47:54
- perl
twitterの#yapcasia2009ハッシュタグがスクリーンに晒されるのが個人的に非常にツボだったので、wassrのyapcasia2009チャンネルに発言するとirc.freenode.orgの#yapc.asia-jaに投稿するボットも作ってみました。
wassrにはstreaming APIはないようなので5秒ごとにpollingしちゃってます。いいんでしょうか。
参考文献(つうかほぼパクリ):
Twitterのハッシュタグ付き発言をIRCに投稿するボットをYAPC::Asia向けに作った
以下コード
#!/usr/bin/perl use strict; use warnings; use AnyEvent::IRC::Client; use Net::Wassr; use Encode (); use Storable; my $channel = '#yapc.asia-ja'; my $interval = 5; my $wassr_channel = 'yapcasia2009'; my $wassr = Net::Wassr->new( user => 'nihen', passwd => '*****', ); my $cv = AnyEvent->condvar; my $pc = AnyEvent::IRC::Client->new; my $send_message = -e 'send_message' ? retrieve('send_message') : {}; $SIG{INT} = $SIG{TERM} = sub { $pc->disconnect('bye'); store $send_message, 'send_message'; exit; }; $pc->reg_cb( connect => sub { my ( $pc, $err ) = @_; if ( defined $err ) { warn $err; return; } }, registered => sub { my ( $self ) = @_; print "registerd!\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.org', 6667, { nick => 'wassr_bot', user => 'wassr_bot', real => 'wassr_bot', }); my $w = AnyEvent->timer(after => $interval, interval => $interval, cb => sub { my $time_line = $wassr->channel_timeline('name_en=' . $wassr_channel); if ( !$time_line || ref $time_line ne 'ARRAY' ) { return; } foreach my $message ( @{$time_line} ) { next if $send_message->{$message->{rid}}; $send_message->{$message->{rid}} = 1; $pc->send_chan($channel, 'NOTICE', $channel, Encode::encode('utf-8', $message->{user}->{login_id} . ': ' . $message->{body})); } }); $cv->wait;
コメント:0
トラックバック:0
- この記事のトラックバック URL
- https://blog.everqueue.com/chiba/2009/09/10/310/trackback/
- トラックバックの送信元リスト
- Wassrのyapcasia2009チャンネルの発言をIRCに投稿するボットをYAPC::Asiaの二日目向けに作った - へぼい日記 より