File Coverage

blib/lib/WebService/Klout.pm
Criterion Covered Total %
statement 19 49 38.7
branch 1 8 12.5
condition 1 3 33.3
subroutine 6 16 37.5
pod 9 10 90.0
total 36 86 41.8


line stmt bran cond sub pod time code
1             package WebService::Klout;
2              
3 8     8   206277 use strict;
  8         24  
  8         344  
4 8     8   46 use warnings;
  8         19  
  8         277  
5 8     8   47 use Carp;
  8         25  
  8         821  
6 8     8   12209 use LWP::UserAgent;
  8         540120  
  8         264  
7 8     8   10525 use JSON;
  8         122308  
  8         43  
8              
9             our $VERSION = '1.0.1';
10              
11             our %API_URI = (
12             'score' => 'http://api.klout.com/1/klout.json',
13             'users_show' => 'http://api.klout.com/1/users/show.json',
14             'users_topics' => 'http://api.klout.com/1/users/topics.json',
15             'influenced_by' => 'http://api.klout.com/1/soi/influenced_by.json',
16             'influencer_of' => 'http://api.klout.com/1/soi/influencer_of.json',
17             );
18              
19             sub new {
20 1     1 0 1118 my ($class, %arg) = @_;
21              
22 1 50 33     12 unless ( $arg{'api_key'} ||= $ENV{'KLOUT_API_KEY'} ) {
23 0         0 croak 'api_key is empty';
24             }
25              
26 1         13 my $ua = LWP::UserAgent->new('agent' => "WebService-Klout/$VERSION");
27              
28 1         4810 bless { 'ua' => $ua, %arg }, $class;
29             }
30              
31 0     0 1   sub score { _request(@_) }
32 0     0 1   sub users_show { _request(@_) }
33 0     0 1   sub users_topics { _request(@_) }
34 0     0 1   sub influenced_by { _request(@_) }
35 0     0 1   sub influencer_of { _request(@_) }
36              
37             sub _request {
38 0     0     my ($self, @users) = @_;
39              
40 0 0         return unless @users;
41              
42 0           my $caller = (caller 1)[3];
43 0           my ($action) = $caller =~ /([^:]+)$/o;
44              
45             # parameter example http://developer.klout.com/docs/read/api/API
46 0           my $url = $API_URI{ $action };
47 0           my $key = $self->{'api_key'};
48 0           my $users = encode_json(\@users);
49              
50 0           my $res = $self->{'ua'}->post($url, { 'key' => $key, 'users' => $users });
51              
52 0 0         unless ( $res->is_success ) {
53 0           $self->{'lwp.error'} = $res->status_line;
54              
55 0 0         if ( $res->code eq 403 ) {
56 0           carp '403 Developer Inactive. Check your API key.';
57             }
58             else {
59 0           carp $res->status_line;
60             }
61              
62 0           return;
63             }
64              
65 0           my $json = $res->decoded_content;
66 0           my $data = decode_json($json);
67              
68 0           $self->{'klout.status'} = $data->{'status'};
69 0           $self->{'klout.json'} = $json;
70 0           $self->{'klout.raw'} = $data;
71              
72 0           return $data->{'users'};
73             }
74              
75 0     0 1   sub json { shift->{'klout.json'} }
76 0     0 1   sub raw { shift->{'klout.raw'} }
77 0     0 1   sub status { shift->{'klout.status'} }
78 0     0 1   sub error { shift->{'lwp.error'} }
79              
80             1;
81              
82             __END__