File Coverage

blib/lib/WebService/OkiLab/ExtractPlace.pm
Criterion Covered Total %
statement 18 60 30.0
branch 0 18 0.0
condition 0 6 0.0
subroutine 6 13 46.1
pod 7 7 100.0
total 31 104 29.8


line stmt bran cond sub pod time code
1             package WebService::OkiLab::ExtractPlace;
2            
3 1     1   24542 use warnings;
  1         3  
  1         31  
4 1     1   5 use strict;
  1         3  
  1         33  
5 1     1   5 use Carp;
  1         6  
  1         107  
6            
7             our $VERSION = 0.02;
8            
9 1     1   1561 use HTTP::Request::Common qw(GET POST);
  1         35062  
  1         106  
10 1     1   1314 use LWP::UserAgent;
  1         36979  
  1         30  
11 1     1   1025 use JSON;
  1         15745  
  1         5  
12            
13             sub new {
14 0     0 1   my $class = shift;
15 0           my $self = bless {}, $class;
16 0           $self->url('http://okilab.jp/project/location/api/v1/extract_place/');
17 0           my $ua = LWP::UserAgent->new();
18 0           $ua->env_proxy();
19 0           $self->ua($ua);
20 0           return $self;
21             }
22            
23             sub param {
24 0     0 1   my $self = shift;
25 0 0         if (@_) {
26 0           my $key = shift;
27 0 0         $self->{"_$key"} = shift if (@_);
28 0           return $self->{"_$key"};
29             } else {
30 0           my @keys = sort map { substr($_, 1) } grep { /^_/ } keys(%{$self});
  0            
  0            
  0            
31 0           return @keys;
32             }
33             }
34            
35 0     0 1   sub ua { my $self = shift; return $self->param('ua', @_); }
  0            
36 0     0 1   sub url { my $self = shift; return $self->param('url', @_); }
  0            
37 0     0 1   sub res { my $self = shift; return $self->param('res', @_); }
  0            
38 0     0 1   sub req { my $self = shift; return $self->param('req', @_); }
  0            
39            
40             sub extract {
41 0     0 1   my $self = shift;
42 0           my $text = shift;
43 0           my $ua = $self->ua();
44 0           my $url = URI->new($self->url());
45 0 0         return $self->error("Can't load LWP::UserAgent object.") if (not UNIVERSAL::isa($ua, 'LWP::UserAgent'));
46 0 0         return $self->error("Web service url is invalid. ($url)") if ($url->scheme ne 'http');
47 0 0         return $self->error("Text is empty.") if ($text !~ /\S/);
48             # create HTTP::Response
49 0   0       my $method = uc($self->param('method')) || 'POST';
50 0 0         $url->query_form('text' => $text) if ($method eq 'GET');
51 0 0         my $req = ($method eq 'GET') ? GET($url) : POST($url, ['text' => $text]);
52             # do reqeust
53 0           $self->req($req);
54 0           my $res = $ua->request($req);
55 0 0         $self->res($res) || return $self->error('Response is empty.');
56 0 0         $res->is_success || return $self->error(sprintf('Request failed. (%s)', $res->status_line));
57             # parse result
58 0   0       my $json = $res->content() || return $self->error('Response content is empty.');
59 0   0       my $result = jsonToObj($json) || return $self->error("Can't parse response content.");
60 0           return $result;
61             }
62            
63             1;
64             __END__