AnyEvent-Twitter
view release on metacpan or search on metacpan
lib/AnyEvent/Twitter.pm view on Meta::CPAN
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
$cv->begin;
$ua->get('account/verify_credentials', {
include_entities => 1
}, sub {
my ($header, $response, $reason) = @_;
say $response->{screen_name};
$cv->end;
});
# POST request with parameters
$cv->begin;
$ua->post('statuses/update', {
status => 'ããã¯ã«ã»ã¸ã¨ ã¡ãã¬ãã'
}, sub {
my ($header, $response, $reason) = @_;
say $response->{user}{screen_name};
$cv->end;
});
# verbose and old style
$cv->begin;
( run in 2.717 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )