AnyEvent-Twitter
view release on metacpan or search on metacpan
lib/AnyEvent/Twitter.pm view on Meta::CPAN
$args{auth} ||= 'authorize';
my $req = __PACKAGE__->_make_oauth_request(
class => 'Net::OAuth::RequestTokenRequest',
request_method => 'GET',
request_url => $PATH{request_token},
consumer_key => $args{consumer_key},
consumer_secret => $args{consumer_secret},
callback => $args{callback_url},
);
AnyEvent::HTTP::http_request GET => $req->to_url, sub {
my ($body, $header) = @_;
my %token = __PACKAGE__->_parse_response($body);
my $location = URI->new($PATH{ $args{auth} });
$location->query_form(%token);
$args{cb}->($location->as_string, \%token, $body, $header);
};
}
sub get_access_token {
my ($class, %args) = @_;
my @required = qw(
consumer_key consumer_secret
oauth_token oauth_token_secret oauth_verifier
);
for my $item (@required) {
defined $args{$item} or Carp::croak "$item is required";
}
ref $args{cb} eq 'CODE'
or Carp::croak "cb must be callback coderef";
my $req = __PACKAGE__->_make_oauth_request(
class => 'Net::OAuth::AccessTokenRequest',
request_method => 'GET',
request_url => $PATH{access_token},
consumer_key => $args{consumer_key},
consumer_secret => $args{consumer_secret},
token => $args{oauth_token},
token_secret => $args{oauth_token_secret},
verifier => $args{oauth_verifier},
);
AnyEvent::HTTP::http_request GET => $req->to_url, sub {
my ($body, $header) = @_;
my %response = __PACKAGE__->_parse_response($body);
$args{cb}->(\%response, $body, $header);
};
}
sub _parse_response {
my ($class, $body) = @_;
my %query;
for my $pair (split /&/, $body) {
my ($key, $value) = split /=/, $pair;
$query{$key} = URI::Escape::uri_unescape($value);
}
return %query;
}
sub parse_timestamp { # Twitter uses weird created_at format: "Thu Mar 01 17:38:56 +0000 2012"
my ($class, $created_at) = @_;
localtime( Time::Piece->strptime($created_at, '%a %b %d %H:%M:%S %z %Y' )->epoch )
}
1;
__END__
=encoding utf-8
=head1 NAME
AnyEvent::Twitter - A thin wrapper for Twitter API using OAuth
=head1 SYNOPSIS
use utf8;
use Data::Dumper;
use AnyEvent;
use AnyEvent::Twitter;
my $ua = AnyEvent::Twitter->new(
consumer_key => 'consumer_key',
consumer_secret => 'consumer_secret',
token => 'access_token',
token_secret => 'access_token_secret',
);
# or
my $ua = AnyEvent::Twitter->new(
consumer_key => 'consumer_key',
consumer_secret => 'consumer_secret',
access_token => 'access_token',
access_token_secret => 'access_token_secret',
);
# or, if you use eg/gen_token.pl, you can write simply as:
my $json_text = slurp 'config.json';
my $config = JSON::decode_json($json_text);
my $ua = AnyEvent::Twitter->new(%$config);
my $cv = AE::cv;
# GET request
$cv->begin;
$ua->get('account/verify_credentials', sub {
my ($header, $response, $reason) = @_;
say $response->{screen_name};
$cv->end;
});
# GET request with parameters
( run in 1.791 second using v1.01-cache-2.11-cpan-f56aa216473 )