File Coverage

blib/lib/WebService/Hatena/Bookmark/Lite.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             package WebService::Hatena::Bookmark::Lite;
2              
3 3     3   3006 use strict;
  3         7  
  3         150  
4 3     3   17 use warnings;
  3         5  
  3         1692  
5             our $VERSION = '0.03';
6              
7 3     3   20 use Carp qw/croak/;
  3         4  
  3         516  
8 3     3   6801 use XML::Atom::Link;
  0            
  0            
9             use XML::Atom::Entry;
10             use XML::Atom::Client;
11              
12             use base qw/ Class::Accessor::Fast /;
13              
14             __PACKAGE__->mk_accessors qw/
15             client
16             /;
17              
18             my $HatenaURI = q{http://b.hatena.ne.jp/};
19             my $PostURI = $HatenaURI.q{atom/post};
20             my $FeedURI = $HatenaURI.q{atom/feed};
21              
22             sub new{
23             my( $class , %arg ) = @_;
24              
25             my $client = XML::Atom::Client->new;
26             $client->username($arg{username});
27             $client->password($arg{password});
28              
29             bless {
30             client => $client
31             },$class;
32             }
33              
34             sub add{
35             my( $self , %arg ) = @_;
36              
37             my $url = $arg{url};
38             my $tag = $arg{tag};
39             my $comment = $arg{comment};
40              
41             my $entry = XML::Atom::Entry->new;
42             $entry->add_link( $self->_make_link_element($url) );
43              
44             $entry->summary( $self->_make_summary($tag,$comment) );
45              
46             return $self->client->createEntry($PostURI , $entry)
47             or croak $self->client->errstr;
48             }
49              
50             sub getEntry{
51             my( $self , %arg ) = @_;
52              
53             my $EditURI = $self->_set_edit_uri( $arg{edit_ep} );
54              
55             return $self->client->getEntry( $EditURI )
56             or croak $self->client->errstr;
57             }
58              
59             sub edit{
60             my( $self , %arg ) = @_;
61              
62             my $tag = $arg{tag};
63             my $comment = $arg{comment};
64              
65             my $EditURI = $self->_set_edit_uri( $arg{edit_ep} );
66              
67             my $entry = XML::Atom::Entry->new;
68              
69             $entry->summary( $self->_make_summary($tag,$comment) );
70              
71             return $self->client->updateEntry($EditURI , $entry)
72             or croak $self->client->errstr;
73             }
74              
75             sub delete{
76             my( $self , %arg ) = @_;
77              
78             my $EditURI = $self->_set_edit_uri( $arg{edit_ep} );
79              
80             return $self->client->deleteEntry($EditURI )
81             or croak $self->client->errstr;
82             }
83              
84             sub getFeed{
85             my $self = shift;
86              
87             return $self->client->getFeed( $FeedURI )
88             or croak $self->client->errstr;
89             }
90              
91             sub entry2edit_ep{
92             my( $self , $entry ) = @_;
93              
94             return if ! $entry;
95              
96             my $edit = '';
97             for my $link ( $entry->link() ){
98             if( $link->rel() eq 'service.edit'){
99             $edit = $link->href();
100             last;
101             }
102             else{
103             next;
104             }
105             }
106             my $edit_ep = substr($edit , length("$HatenaURI") );
107              
108             return $edit_ep;
109             }
110              
111              
112              
113             sub _set_edit_uri{
114             my( $self , $edit_ep ) = @_;
115              
116             return if ! $edit_ep;
117              
118             return sprintf("%s%s", $HatenaURI , $edit_ep);
119             }
120              
121             sub _make_link_element{
122             my( $self , $url ) = @_;
123              
124             my $link = XML::Atom::Link->new;
125              
126             $link->rel('related');
127             $link->type('text/html');
128             $link->href($url);
129              
130             return $link;
131             }
132              
133             sub _make_tag{
134             my( $self , $tag_list ) = @_;
135              
136             my $tag_str = '';
137             for my $tag ( @{$tag_list} ){
138             $tag_str .= sprintf("[%s]" , $tag);
139             }
140              
141             return $tag_str;
142             }
143              
144             sub _make_summary{
145             my ( $self , $tag , $comment ) = @_;
146              
147             my $summary = $self->_make_tag($tag);
148             $summary .= $comment || '';
149              
150             return $summary;
151             }
152              
153              
154             1;
155             __END__