AnyEvent::Twitter::Stream が 一般公開された User Streams API に対応というネタを見たので、サンプル書いてみました。
といっても、ほとんど、AnyEvent::Twitter::StreamでDesktop Notify – すぎゃーんメモ のコードを使ったようなものですが。
ハッシュタグ #oreimo にヒットした行をコマンドラインに出力するようにしてるのは、ちょうど TL で俺妹の実況がされていたから。Windows 上で実行しているので、文字コードは sjis にしてから print してます。
うーん、思った以上に簡単に UserStream が利用できますね。AnyEvent::Twitter を使えば TL へのポストも可能なようで、bot の TL 取得部分をこの処理に変えると、最速で反応することもできるんだろうなあ。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #!/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 ; |
コメント