AnyEvent-Twitter-Stream
view release on metacpan or search on metacpan
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,
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 )