RakuAPI.pm
なんかいろいろおかしかったので修正。
package RakuAPI; use strict; use warnings; use XML::TreePP; use base qw(Class::Accessor::Fast); __PACKAGE__->mk_accessors(qw/tpp base_url/); sub new { my $class = shift; my $self = { tpp => XML::TreePP->new(force_array => ['Result']), base_url => 'http://rakuapi.ddo.jp/api?keyword=', }; return bless $self, $class; } sub search { my ($self, $keyword, $option) = @_; my @params; if ( $option ) { foreach ( keys %{$option} ) { my $param = $_ . '=' . $option->{$_}; push @params, $param; } } $keyword =~ s/(\W)/'%' . unpack('H2', $1)/eg; my $reqest_url = $self->base_url . $keyword; $reqest_url .= '&' . join('&', @params) if ( $option ); my $parsed_xml = $self->tpp->parsehttp(GET => $reqest_url); my @results; foreach my $result( @{$parsed_xml->{ResultSet}->{Result}} ) { push @results, RakuAPI::Result->new($result); } return @results; } 1; package RakuAPI::Result; use strict; use warnings; use base qw(Class::Accessor::Fast); sub new { my ($class, $result) = @_; my $self = $class->SUPER::new($result); $class->mk_accessors(keys %{$result}); return bless $self, $class; } 1;
まだいろいろおかしいような気ガス。
一応動く。
use strict; use warnings; use RakuAPI; my $app = RakuAPI->new; my @results = $app->search('PSP', {sort => 'high'}); foreach my $result ( @results ) { print $result->Title, "\n"; print $result->Url, "\n"; }
上の実行結果。
新品!カルピジャーニ ソフトクリームフリーザー AES403PSP/S http://item.rakuten.co.jp/recyclemart/cpjheaaa19010n/ 新品!カルピジャーニ ソフトクリームフリーザー AES403PSP/S http://www.rakuten.co.jp/recyclemart/451778/452834/593927/#693600 新品!カルピジャーニ ソフトクリームフリーザー AES261PSP/S http://item.rakuten.co.jp/recyclemart/cpjheaaa19000n/ 新品!カルピジャーニ ソフトクリームフリーザー AES261PSP/S http://www.rakuten.co.jp/recyclemart/451778/452834/593927/#693494 新品!カルピジャーニ ソフトクリームフリーザー 191BAR/PSP http://item.rakuten.co.jp/recyclemart/cpjheaaa19040n/ 新品!カルピジャーニ ソフトクリームフリーザー 191BAR/PSP http://www.rakuten.co.jp/recyclemart/451778/452834/593927/#694419 中古:カルピジャーニ ソフトクリームフリーザー(ソフトクリーマー) AES-403PSP http://item.rakuten.co.jp/recyclemart/cpjhe95a21650u/ SBDB001 【25%OFF!】 スプリングドライブ SEIKO PRPSPEX[プロスペックス] http://www.rakuten.co.jp/iget/655089/727155/655180/661745/#618078 ●MUSE RESEARCH Receptor XT http://www.rakuten.co.jp/ikebe/443913/505946/622909/#633263 SBDS001 【25%OFF!】 SEIKO PRPSPEX[プロスペックス] http://www.rakuten.co.jp/iget/655089/727155/655180/656917/#613772
同一ファイル内にクラス複数作る時の書き方はあれでいいのかな。