2009/07/23

Recent entries from same category

  1. PerlでWindowsと親和性の高いreadlineが欲しい → あった「Caroline」
  2. Perl をゆるふわと語ろう
  3. cpanfile とは何か、なぜそれを使いたいのか
  4. plackup の --path 引数
  5. Github Notification API が出たので通知を Growl するの書いた。

miyagawaさんのAnyEvent::Twitter::Streamを使って「NullPointerException」をtrackして「Ga!!」を返信するスクリプトを書いてみた。trackにマルチバイトが使えないのが残念。「がっ!!」にしても良いけど、出来れば欧米の方達にも反応したい。
#!/usr/bin/perl
use strict;
use warnings;
use Config::Pit;
use AnyEvent::Twitter::Stream;
use Net::Twitter::Lite;

binmode STDOUT, ":utf8";

my $config = pit_get("nullpo-ga", require => {
        "username" => "your username on twitter.com",
        "password" => "your password on twitter.com"
    });

my $nt = Net::Twitter::Lite->new(
    username => $config->{username},
    password => $config->{password},
);

my $done = AnyEvent->condvar;
my $streamer = AnyEvent::Twitter::Stream->new(
    username => $config->{username},
    password => $config->{password},
    method   => "track",
    ( track => 'NullPointerException' ),
    on_tweet => sub {
        my $tweet = shift;
        print "$tweet->{user}{screen_name}: $tweet->{text}\n";
        eval { $nt->update("\@$tweet->{user}{screen_name} Ga!!") };
    },
    on_error => sub {
        my $error = shift;
        warn "ERROR: $error";
        $done->send;
    },
    on_eof   => sub {
        $done->send;
    },
);

$done->recv;


追記
miyagawaさんから返信のupdateでブロックしちゃうのでAnyEvent::Twitter使えば良いと教えて貰いました。
#!/usr/bin/perl
use strict;
use warnings;
use Config::Pit;
use AnyEvent::Twitter;
use AnyEvent::Twitter::Stream;

binmode STDOUT, ":utf8";

my $config = pit_get("nullpo-ga", require => {
        "username" => "your username on twitter.com",
        "password" => "your password on twitter.com"
    }
);

my $done = AnyEvent->condvar;

my $twitty = AnyEvent::Twitter->new(
    username => $config->{username},
    password => $config->{password},
);

my $streamer = AnyEvent::Twitter::Stream->new(
    username => $config->{username},
    password => $config->{password},
    method   => "track",
    ( track => 'NullPointerException' ),
    on_tweet => sub {
        my $tweet = shift;
        print "$tweet->{user}{screen_name}: $tweet->{text}\n";
        $twitty->update_status("\@$tweet->{user}{screen_name} Ga!!", sub {
                my ($twitty, $status, $js_status, $error) = @_;
                if (defined $error) {
                    warn "ERROR: $error";
                }
            }
        );
    },
    on_error => sub {
        my $error = shift;
        warn "ERROR: $error";
        $done->send;
    },
    on_eof   => sub {
        $done->send;
    },
);

$done->recv;
Posted at by