package WebService::ReutersConnect::Channel; use Moose; use DateTime; use DateTime::Format::ISO8601; has 'reuters' => ( is => 'ro', weak_ref => 1 , isa => 'WebService::ReutersConnect', required => 1 ); has 'description' => ( is => 'ro' , isa => 'Str' , default => '' ); has 'alias' => ( is => 'ro' , isa => 'Str' ); has 'last_update' => ( is => 'ro', isa => 'DateTime' ); has 'categories' => ( is => 'ro', isa => 'ArrayRef[WebService::ReutersConnect::Category]', required => 1, default => sub{ []; } ); =head1 NAME WebService::ReutersConnect::Channel - A ReutersConnect Channel =head2 alias The 'Primary ID' of the channel. =head2 description A short descriptive string. =head2 last_update A L<DateTime> of .. the last channel update. =head2 categories Retuns an ArrayRef of L<WebService::ReutersConnect::Category>'s Usage: foreach my $cat ( @{$channel->categories()} ){ print(' Category: '.$cat->id().' - '.$cat->description()); } =head2 is_online_report Returns true if this Channel contains the OLR category. Online report channel can be used to fetch edited NEPs (News Event Packages) with the WebService::ReutersConnect::packages method. Usage: if( $this->is_online_report() ){ ... } =cut sub is_online_report{ my ($self) = @_; foreach my $cat ( @{$self->categories()} ){ if( $cat->id() eq 'OLR' ){ return $cat; ## HIT! } } return; ## Fail. } =head2 from_node Builds a new instance from the given WebService::ReutersConnect and XML node object. =cut sub from_node{ my ($class, $reuters , $node) = @_; my $build_params = { reuters => $reuters }; ## Find description my $description = $node->findvalue('./description'); $build_params->{description} = $description; my $alias = $node->findvalue('./alias'); $build_params->{alias} = $alias; my $lastupdate_string = $node->findvalue('./lastUpdate'); if( $lastupdate_string ){ $build_params->{'last_update'} = DateTime::Format::ISO8601->parse_datetime($lastupdate_string); } my @categories = (); my @cat_nodes = $node->findnodes('./category'); foreach my $cat_node ( @cat_nodes ){ my ( $cat_id , $cat_desc ) = ( $cat_node->getAttribute('id') , $cat_node->getAttribute('description') ); push @categories , $reuters->_vivify_category({ id => $cat_id , description => $cat_desc }); } $build_params->{'categories'} = \@categories; return $class->new($build_params); } __PACKAGE__->meta->make_immutable(); 1;