File Coverage

blib/lib/WebService/Booklog.pm
Criterion Covered Total %
statement 41 74 55.4
branch 13 16 81.2
condition 1 9 11.1
subroutine 8 19 42.1
pod 4 4 100.0
total 67 122 54.9


line stmt bran cond sub pod time code
1             package WebService::Booklog;
2              
3 3     3   3485 use strict;
  3         7  
  3         118  
4 3     3   16 use warnings;
  3         6  
  3         162  
5              
6             # ABSTRACT: Access to unofficial API of booklog.jp
7             our $VERSION = 'v0.0.1'; # VERSION
8              
9 3     3   3467 use LWP::UserAgent;
  3         151128  
  3         140  
10 3     3   3094 use JSON::Any;
  3         74762  
  3         20  
11              
12             sub new
13             {
14 3     3 1 2202 my ($self) = @_;
15 3   33     31 my $class = ref $self || $self;
16 3         33 return bless {
17             _UA => LWP::UserAgent->new,
18             }, $class;
19             }
20              
21             my %status = (
22             want_read => 1,
23             reading => 2,
24             read => 3,
25             stacked => 4,
26             );
27              
28             sub get_minishelf
29             {
30 3     3 1 12738 my ($self, $account, %arg) = @_;
31 3         9 my $data = {};
32 3 50       15 $data->{status} = $status{lc $arg{status}} if exists $arg{status};
33 3         11 foreach my $key (qw(category rank count)) {
34 9 100       32 $data->{$key} = $arg{$key} if exists $arg{$key};
35             }
36 3         11 my $param = join '&', map { $_.'='.$data->{$_} } keys %$data;
  2         13  
37 3 100       12 $param = "?$param" if length $param;
38 3         27 my $ret = JSON::Any->from_json($self->{_UA}->get('http://api.booklog.jp/json/'.$account.$param)->content);
39 3 100       2192866 $ret->{category} = {} if ref $ret->{category} eq 'ARRAY';
40 3         9 $ret->{books} = [ grep { ref $_ ne 'ARRAY' } @{$ret->{books}} ];
  15         35  
  3         10  
41 3         43 return $ret;
42             }
43              
44             sub get_review
45             {
46 1     1 1 4832 my ($self, $book_id) = @_;
47              
48 1         15 my $ret = JSON::Any->from_json($self->{_UA}->get('http://booklog.jp/json/review/'.$book_id)->content);
49 1 50       890487 return $ret->{$book_id} if exists $ret->{$book_id};
50 0         0 return;
51             }
52              
53             sub get_shelf
54             {
55 4     4 1 3874380 my ($self, $account, %arg) = @_;
56 4         12 my $data = {};
57 4 50       22 $data->{status} = $status{lc $arg{status}} if exists $arg{status};
58 4 100       18 $data->{category_id} = $arg{category} if exists $arg{category};
59 4         13 foreach my $key (qw(sort rank tag genre page parpage keyword)) {
60 28 100       66 $data->{$key} = $arg{$key} if exists $arg{$key};
61             }
62 4         18 my $param = join '&', map { $_.'='.$data->{$_} } keys %$data;
  3         15  
63 4         43 my $ret = JSON::Any->from_json($self->{_UA}->get('http://booklog.jp/users_api/'.$account.'?'.$param)->content);
64             }
65              
66             # Followings are not yet tested
67             sub _login
68             {
69 0     0     my ($self, $account, $password) = @_;
70 0           my $ret = $self->{_UA}->post('https://booklog.jp/login', { account => $account, password => $password });
71             }
72              
73             sub _logout
74             {
75 0     0     my ($self) = @_;
76 0           my $ret = $self->{_UA}->get('http://booklog.jp/logout');
77             }
78              
79             sub _add_fav
80             {
81 0     0     my ($self, $book_id) = @_;
82 0           $self->{_UA}->post('http://booklog.jp/api/review/fav', { book_id => $book_id });
83             }
84              
85             sub _del_fav
86             {
87 0     0     my ($self, $book_id) = @_;
88 0           $self->{_UA}->post('http://booklog.jp/api/review/fav', { book_id => $book_id, _method => 'delete' });
89             }
90              
91             sub _add_follow
92             {
93 0     0     my ($self, $account) = @_;
94 0           $self->{_UA}->post('http://booklog.jp/api/follow/add', { account => $account });
95             }
96              
97             # status
98             # read_at_[ymd] (w/o 0 pad) / read_at_null
99             # rank
100             # category_id
101             # description
102             # public (2: revealer)
103             # tags
104             # create_on_[ymdhis] (w/ 0 pad)
105             # memo
106             sub _edit_review
107             {
108 0     0     my ($self, $service, $id, $args) = @_;
109 0   0       $args ||= {};
110 0           $args->{_method} = 'edit';
111 0           $self->{_UA}->post("http://booklog.jp/edit/$service/$id", $args);
112             }
113              
114             # description
115             # page
116             sub _edit_quote
117             {
118 0     0     my ($self, $service, $id, $args) = @_;
119 0   0       $args ||= {};
120 0           $args->{_method} = 'quote';
121 0           $self->{_UA}->post("http://booklog.jp/edit/$service/$id#select_tab2", $args);
122             }
123              
124             # read_at_[ymd] (w/o 0 pad)
125             # rank
126             # comment
127             sub _edit_reread
128             {
129 0     0     my ($self, $service, $id, $book_id, $args) = @_;
130 0   0       $args ||= {};
131 0           $args->{_method} = 'reread';
132 0           $args->{book_id} = $book_id;
133 0           $self->{_UA}->post("http://booklog.jp/edit/$service/$id#select_tab2", $args);
134             }
135              
136             sub _delete_item
137             {
138 0     0     my ($self, $service, $id) = @_;
139 0           my $args = { _method => 'delete' };
140 0           $self->{_UA}->post("http://booklog.jp/edit/$service/$id#select_tab2", $args);
141             }
142              
143             sub _sort_all
144             {
145 0     0     my ($self, @book_id) = @_;
146 0           my $arg = [map { ('booklist[]', $_) } @book_id];
  0            
147 0           $self->{_UA}->post("http://booklog.jp/sort", $arg);
148             }
149              
150             sub _set_sort
151             {
152 0     0     my ($self, $book_id, $sort) = @_;
153 0           $self->{_UA}->post('http://booklog.jp/sort_edit', { book_id => $book_id, 'sort' => $sort });
154             }
155              
156             1;
157              
158             __END__