AnyEvent-Twitter-Stream

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN


SYNOPSIS

      use AnyEvent::Twitter::Stream;
      
      my $done = AE::cv;
    
      # receive updates from @following_ids
      my $listener = AnyEvent::Twitter::Stream->new(
          username => $user,
          password => $password,
          method   => "filter",  # "firehose" for everything, "sample" for sample timeline
          follow   => join(",", @following_ids), # numeric IDs
          on_tweet => sub {
              my $tweet = shift;
              warn "$tweet->{user}{screen_name}: $tweet->{text}\n";
          },
          on_keepalive => sub {
              warn "ping\n";
          },
          on_delete => sub {
              my ($tweet_id, $user_id) = @_; # callback executed when twitter send a delete notification
              ...
          },
          timeout => 45,
      );
    
      # track keywords
      my $guard = AnyEvent::Twitter::Stream->new(
          username => $user,
          password => $password,
          method   => "filter",
          track    => "Perl,Test,Music",
          on_tweet => sub { },
      );
    
      # to use OAuth authentication
      my $listener = AnyEvent::Twitter::Stream->new(
          consumer_key    => $consumer_key,
          consumer_secret => $consumer_secret,
          token           => $token,

README  view on Meta::CPAN

    AnyEvent::Twitter::Stream is an AnyEvent user to receive Twitter
    streaming API, available at http://dev.twitter.com/pages/streaming_api
    and http://dev.twitter.com/pages/user_streams.

    See "track.pl" in eg for more client code example.

METHODS

 my $streamer = AnyEvent::Twitter::Stream->new(%args);

    username password

      These arguments are used for basic authentication.

    consumer_key consumer_secret token token_secret

      If you want to use the OAuth authentication mechanism, you need to
      set these arguments

    method

eg/track.pl  view on Meta::CPAN

#!/usr/bin/perl
use strict;
use AnyEvent::Twitter::Stream;

if ($ENV{FIREHOSE_SERVER}) {
    $AnyEvent::Twitter::Stream::STREAMING_SERVER = $ENV{FIREHOSE_SERVER};
}

my $done = AE::cv;

my($user, $password, $method, %args) = @ARGV;

binmode STDOUT, ":utf8";

my $streamer = AnyEvent::Twitter::Stream->new(
    username => $user,
    password => $password,
    method   => $method || "sample",
    %args,
    use_compression => 1,
    on_tweet => sub {
        my $tweet = shift;
        print "$tweet->{user}{screen_name}: $tweet->{text}\n";
    },
    on_error => sub {
        my $error = shift;
        warn "ERROR: $error";

lib/AnyEvent/Twitter/Stream.pm  view on Meta::CPAN

    # DEPRECATED
    links      => [ GET  => sub { "$PROTOCOL://$STREAMING_SERVER/1/statuses/links.json"   } ],
    retweet    => [ GET  => sub { "$PROTOCOL://$STREAMING_SERVER/1/statuses/retweet.json" } ],
);

sub new {
    my $class = shift;
    my %args  = @_;

    my $username        = delete $args{username};
    my $password        = delete $args{password};
    my $consumer_key    = delete $args{consumer_key};
    my $consumer_secret = delete $args{consumer_secret};
    my $token           = delete $args{token};
    my $token_secret    = delete $args{token_secret};
    my $method          = delete $args{method};
    my $on_connect      = delete $args{on_connect} || sub { };
    my $on_tweet        = delete $args{on_tweet};
    my $on_error        = delete $args{on_error} || sub { die @_ };
    my $on_eof          = delete $args{on_eof} || sub { };
    my $on_keepalive    = delete $args{on_keepalive} || sub { };

lib/AnyEvent/Twitter/Stream.pm  view on Meta::CPAN

            request_method   => $request_method,
            signature_method => 'HMAC-SHA1',
            timestamp        => time,
            nonce            => MIME::Base64::encode( time . $$ . rand ),
            request_url      => $uri,
            $request_method eq 'POST' ? (extra_params => \%args) : (),
        );
        $request->sign;
        $auth = $request->to_authorization_header;
    }else{
        $auth = "Basic ".MIME::Base64::encode("$username:$password", '');
    }

    my $self = bless {}, $class;

    {
        Scalar::Util::weaken(my $self = $self);

        my $set_timeout = $timeout
            ? sub { $self->{timeout} = AE::timer($timeout, 0, sub { $on_error->('timeout') }) }
            : sub {};

lib/AnyEvent/Twitter/Stream.pm  view on Meta::CPAN


1;
__END__

=encoding utf-8

=for stopwords
API AnyEvent

=for test_synopsis
my($user, $password, @following_ids, $consumer_key, $consumer_secret, $token, $token_secret);

=head1 NAME

AnyEvent::Twitter::Stream - Receive Twitter streaming API in an event loop

=head1 SYNOPSIS

  use AnyEvent::Twitter::Stream;
  
  my $done = AE::cv;

  # receive updates from @following_ids
  my $listener = AnyEvent::Twitter::Stream->new(
      username => $user,
      password => $password,
      method   => "filter",  # "firehose" for everything, "sample" for sample timeline
      follow   => join(",", @following_ids), # numeric IDs
      on_tweet => sub {
          my $tweet = shift;
          warn "$tweet->{user}{screen_name}: $tweet->{text}\n";
      },
      on_keepalive => sub {
          warn "ping\n";
      },
      on_delete => sub {
          my ($tweet_id, $user_id) = @_; # callback executed when twitter send a delete notification
          ...
      },
      timeout => 45,
  );

  # track keywords
  my $guard = AnyEvent::Twitter::Stream->new(
      username => $user,
      password => $password,
      method   => "filter",
      track    => "Perl,Test,Music",
      on_tweet => sub { },
  );

  # to use OAuth authentication
  my $listener = AnyEvent::Twitter::Stream->new(
      consumer_key    => $consumer_key,
      consumer_secret => $consumer_secret,
      token           => $token,

lib/AnyEvent/Twitter/Stream.pm  view on Meta::CPAN

L<http://dev.twitter.com/pages/user_streams>.

See L<eg/track.pl> for more client code example.

=head1 METHODS

=head2 my $streamer = AnyEvent::Twitter::Stream->new(%args);

=over 4

=item B<username> B<password>

These arguments are used for basic authentication.

=item B<consumer_key> B<consumer_secret> B<token> B<token_secret>

If you want to use the OAuth authentication mechanism, you need to set these arguments

=item B<method>

The name of the method you want to use on the stream. Currently, any one of :

t/streaming.t  view on Meta::CPAN

                my $received = 0;
                my $count_max = 5;
                my ($deleted, $event) = (0, 0);

                note("try $item->{method}");

                {
                    my $done = AE::cv;
                    my $streamer = AnyEvent::Twitter::Stream->new(
                        username => 'test',
                        password => 's3cr3t',
                        method => $item->{method},
                        timeout => 2,
                        on_tweet => sub {
                            my $tweet = shift;

                            if ($tweet->{hello}) {
                                note(Dumper $tweet);
                                is($tweet->{user}, 'test');
                                is($tweet->{path}, $item->{path});
                                is_deeply($tweet->{param}, $item->{option});

t/timeout.t  view on Meta::CPAN

        $AnyEvent::Twitter::Stream::PROTOCOL = 'http'; # real world API uses https

        foreach my $w (keys %pattern) {
            my $destroyed;
            my $received = 0;

            {
                my $done = AE::cv;
                my $streamer = AnyEvent::Twitter::Stream->new(
                    username => 'test',
                    password => 's3cr3t',
                    method => 'filter',
                    track => $w,
                    timeout => 2,
                    on_tweet => sub {
                        my $tweet = shift;
                        $done->send, return if $tweet->{count} > 2;

                        note(Dumper $tweet);
                        $received++;
                    },



( run in 1.307 second using v1.01-cache-2.11-cpan-49f99fa48dc )