作ってみた
WebSearvice::RakuAPI
package WebService::RakuAPI; use strict; use warnings; use WebService::RakuAPI::Result; use LWP::UserAgent; use XML::TreePP; use Carp qw(croak); sub new { bless {}, shift; } sub search { my $self = shift; my $option = shift; my $req_url = $self->create_req_url($option); my $xml = $self->get_xml($req_url); my @results = $self->parse_xml($xml); return @Result; } sub create_req_url { my $self = shift; my $option = shift; foreach ( qw/keyword query q/ ) { croak qq/keyword is required/ unless ( $option->{$_} ); } my @params; foreach ( keys %{$option} ) { my $param = $_ . $option->{$_}; push @params, $param; } my $base_url = 'http://rakuapi.ddo.jp/api?'; my $req_url = $base_url . join('&', @params); return $req_url; } sub get_xml { my $self = shift; my $req_url = shift; my $response = LWP::UserAgent->new->get($req_url); croak qq/Couldn't connect $req_url/ unless ( $response->is_success ); my $xml = $response->content; return $xml; } sub parse_xml { my $self = shift; my $xml = shift; my $tpp = XML::TreePP->new; my $parsed_xml = $tpp->parse($xml); my @results; forearch my $result ( @{$parsed_xml->{ResultSet}->{result}} ) { push @results, WebService::RakuAPI::Result->new($result); } return @results; }
WebService::RakuAPI::Result
package WebService::RakuAPI::Result; use strict; use warnings; use base qw(Class::Accessor::Fast); sub new { my $class = shift; my $result = shift; $class->mk_accessors(keys %{$result}); return $class->SUPER::new($result); }
ちょうてきとう。
とりあえずXMLのみ。
見直しとかは明日やろう。