Cmd-Dwarf
view release on metacpan or search on metacpan
examples/helloworld/app/lib/Dwarf/Module/SocialMedia/Twitter.pm view on Meta::CPAN
my $res = $self->ua->request($req);
return $self->validate($res);
}
sub send_dm {
my ($self, $id, $text) = @_;
$self->call('direct_messages/new', 'POST', {
user_id => $id,
text => $text,
});
}
sub follow {
my ($self, $target_screen_name) = @_;
return $self->call('friendships/create', 'POST', {
screen_name => $target_screen_name
});
}
sub is_following {
my ($self, $target_screen_name) = @_;
my $data = $self->call('friendships/show', 'GET', {
source_id => $self->user_id,
target_screen_name => $target_screen_name,
});
return $data->{relationship}->{source}->{following} ? 1 : 0;
}
sub get_rate_limit_status {
my ($self) = @_;
return $self->call('account/rate_limit_status', 'GET');
}
sub get_timeline {
my ($self, $id, $data) = @_;
$id ||= $self->user_id;
$data ||= {};
$data->{uid} = $id;
return $self->call('statuses/user_timeline', 'GET', $data);
}
sub get_mentions {
my ($self, $id, $data) = @_;
$id ||= $self->user_id;
$data ||= {};
$data->{uid} = $id;
my $res = $self->call('statuses/mentions', 'GET', $data);
return $res;
}
sub get_sent_messages {
my ($self) = @_;
return $self->call('direct_messages/sent', 'GET');
}
sub get_friends_ids {
my ($self, $id) = @_;
$id ||= $self->user_id;
my $cursor = -1;
my @ids = ();
while ($cursor != 0) {
my $result = $self->call('friends/ids', 'GET', {
user_id => $id,
cursor => $cursor,
});
$cursor = $result->{next_cursor_str};
push @ids, @{ $result->{ids} };
}
return \@ids;
}
sub get_followers_ids {
my ($self, $id) = @_;
$id ||= $self->user_id;
my $cursor = -1;
my @ids;
while ($cursor != 0) {
my $result = $self->call('followers/ids', 'GET', {
user_id => $id,
cursor => $cursor,
});
$cursor = $result->{next_cursor_str};
push @ids, @{ $result->{ids} };
}
return @ids;
}
sub lookup_users {
my ($self, $ids, $rows, $offset) = @_;
$offset ||= 0;
my @ids = @$ids;
@ids = grep { defined $_ } @ids[$offset .. $offset + $rows - 1];
return () if @ids == 0;
my $rpp = 100;
my $len = int(@ids / $rpp);
my $users;
my @requests;
for my $i (0 .. $len) {
my @a = @ids;
@a = grep { defined $_ } @a[$i * $rpp .. ($i + 1) * $rpp - 1];
next if @a == 0;
push @requests, [
'users/lookup',
'POST',
{ user_id => join ',', @a }
];
}
my @contents = $self->call_async(@requests);
for my $content (@contents) {
for my $user (@$content) {
$users->{ $user->{id} } = $user;
}
}
return map { $users->{$_} } grep { exists $users->{$_} } @ids;
}
sub make_oauth_request {
my ($self, $type, %params) = @_;
die 'key must be specified.' unless defined $self->key;
die 'secret must be specified.' unless defined $self->secret;
local $Net::OAuth::SKIP_UTF8_DOUBLE_ENCODE_CHECK = 1;
my $req = Net::OAuth->request($type)->new(
version => '1.0',
consumer_key => $self->key,
consumer_secret => $self->secret,
signature_method => 'HMAC-SHA1',
timestamp => time,
nonce => Digest::SHA::sha1_base64(time . $$ . rand),
%params,
);
$req->sign;
( run in 0.643 second using v1.01-cache-2.11-cpan-39bf76dae61 )