/usr/local/CPAN/WebService-Aladdin/WebService/Aladdin/Parser.pm
package WebService::Aladdin::Parser;
use strict;
use warnings;
use XML::FeedPP;
use WebService::Aladdin::Items;
use WebService::Aladdin::Item;
use WebService::Aladdin::Item::Book;
use WebService::Aladdin::Item::DVD;
use WebService::Aladdin::Item::Music;
sub parse_product {
my ($class, $res) = @_;
my $data = XML::FeedPP->new($res->content);
$data->normalize();
my @items = $data->get_item();
my $i = $items[0];
my $item = WebService::Aladdin::Item->new;
if ($i->{'aladdin:bookinfo'}) {
$item = WebService::Aladdin::Item::Book->new;
$item->init(delete $i->{'aladdin:bookinfo'});
} elsif ($i->{'aladdin:musicinfo'}) {
$item = WebService::Aladdin::Item::Music->new;
$item->init(delete $i->{'aladdin:musicinfo'});
} elsif ($i->{'aladdin:dvdinfo'}) {
$item = WebService::Aladdin::Item::DVD->new;
$item->init(delete $i->{'aladdin:dvdinfo'});
}
foreach my $key (keys %{ $i }) {
my $type = $key;
$type =~ s/(?:aladdin:|dc:|:encoded)//;
$type = lcfirst $type;
$item->$type($i->{$key});
}
$item;
}
sub parse_search {
my ($class, $res) = @_;
my $p = WebService::Aladdin::Items->new;
my @items;
if ($res->is_success) {
my $data = XML::FeedPP->new($res->content);
for my $i ( $data->get_item() ) {
my $item = WebService::Aladdin::Item->new;
foreach my $key (keys %{ $i }) {
my $type = $key;
$type =~ s/^(?:aladdin|dc)://;
$type =~ s/:encoded//;
$type = lcfirst $type;
$item->$type($i->{$key});
}
unshift @items, $item;
}
$p->items(\@items);
$p->itemsPerPage($data->get('opensearch:itemsPerPage'));
$p->totalResults($data->get('opensearch:totalResults'));
$p->link($data->get('link'));
$p->startIndex($data->get('opensearch:startIndex'));
} else {
$p->status($res->status_line);
$p->items([]);
}
$p;
}
1;