AnyEvent::Twitter::Streamをさわってみる
最近のperl界隈ではAnyEventが熱いらしい。自分が注目してるのはAnyEvent::Twitter::Streamです。
こいつを使うとTwitterでPostしたEntryが接続しっぱなしで永遠と読めるようになるらしい。最近Twitterを始めた自分としては触らない訳にはいきません。(キリッ
インストール
FreeBSD使いなのでportsからサクット入れようかと思いましたが生憎portsがまだ出来てませんここは潔くcpanで入れましょう
perl -MCPAN -eshell cpan>install AnyEvent::Twitter::Stream
で最初はまずサンプルから始めるのが鉄則です
See \"track.pl\" in eg for more client code example.
#!/usr/bin/perl
use strict;
use AnyEvent::Twitter::Stream;
my $done = AnyEvent->condvar;
my($user, $password, $method, $args) = @ARGV;
my %args;
if ($method eq 'follow') {
$args{follow} = $args;
$method = 'filter';
} elsif ($method eq 'track') {
$args{track} = $args;
$method = 'filter';
}
binmode STDOUT, ":utf8";
my $streamer = AnyEvent::Twitter::Stream->new(
username => $user,
password => $password,
method => $method || "sample",
%args,
on_tweet => sub {
my $tweet = shift;
print "$tweet->{user}{screen_name}: $tweet->{text}\n";
},
on_error => sub {
my $error = shift;
warn "ERROR: $error";
$done->send;
},
on_eof => sub {
$done->send;
},
);
# uncomment to test undef $streamer
# my $t = AE::timer 1, 0, sub { undef $streamer };
$done->recv;
起動させてみる
まったく反応無し、試しにid,passowrdをわざと間違うがそれでもerrorすら出ない
手も足も出ないのでダメもとで違うマシンで試したところこちらは問題なく動作確認できましたが最初のマシンで動かないのが腑に落ちない。install自体は他のモジュール含め問題なくsetupされてるはずなんだが・・・・
ここからが長かったAE::TW::STが依存しているモジュールを調べるとAnyEvent::HTTP→AnyEvent::Socketの依存関係があり順に追っていき最後にたどり着いたのがAnyEvent::SocketでPodに書いてある文が目に止まりました
PERL_ANYEVENT_RESOLV_CONF The file to use instead of /etc/resolv.conf (or OS-specific configuration) in the default resolver. When set to the empty string, no default config will be used.
あーAnyEventってレゾルバー見てるんだって思いピンっと来ました。
動作した方の/etc/resolv.conf
domain omakase.org nameserver 192.168.0.***
ダメな方
domain omakase.org nameserver 0.0.0.0
0.0.0.0→127.0.0.1 に変更したところ無事AnyEvent::Twitter::Streamのサンプルが動作した。 nameserver 0.0.0.0は自分自身を表す書き方って覚えてていままでこっちを使ってました。
こんなとこで1日使ってしまいました。あーーーーーーー
AnyEvent::Twitter::Streamってマジすげーから
皆もいっぺんやってみ
※追記2009-11-13
Twitter Bot完成しました><
利用したモジュール
- AnyEvent::Twitter::Stream
- AnyEvent::Twitter::EnableOAuth
- AnyEvent::DBI
- AnyEvent::Twitter
「ジョジョの奇妙な冒険」のbotで名セリフをつぶやきます。botにtweetするとつぶやき返す単純なもの
Followしてくれると小躍りして喜びます。
ほとんどのbotがtweetすると「1分前APIで」の表示になるですがOAuth を使ってTweetしてるので「5分前 ジョジョ名セリフbotで」と名前つきで表示されるのが嬉しいところです。
こんな簡単にtweetできるモジュールを書いてくれた方に感謝します。