From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use strict;
use Params::Validate ':all';
sub new {
my $class = shift;
bless \(my $a), $class;
}
sub parse {
my $self = shift;
my ($content) = validate_pos( @_, 1 );
my $feed = {};
my $entries = [];
if ( $content =~ /<feed .*?>(.*?)<entry>/s ) {
my $feed_info = $1;
while ( $feed_info =~ m{<(?!link)(\w+).*?>(.*)</\1>}sg ) {
$feed->{$1} = decode_entities($2);
}
}
while ( $content =~ m{<entry>(.*?)</entry>}sg ) {
my $entry_info = $1;
my $entry = {};
while ( $entry_info =~ m{<(?!link)(\w+).*?>(.*)</\1>}sg ) {
my $value = $2;
$value =~ s!\s*<(\w+)>(.*?)</\1>\s*!$2!g;
$entry->{$1} = decode_entities($value);
}
push @$entries, $entry;
}
return ( $feed, $entries );
}
1;
__END__
=head1 NAME
Net::Google::Code::AtomParser - AtomParser with a parsing method for gcode
=head1 DESCRIPTION
=head1 INTERFACE
=head2 new
=head2 parse( $xml_content )
return( $feed, $entries ),
$feed is a hashref like
{
'title' => 'Issue updates for project net-google-code on Google Code',
'updated' => '2009-06-12T05:55:48Z'
}
$entries is an arrayref like
[
{
'content' => '<pre>second comment
</pre>
',
'name' => 'sunnavy',
'title' => 'Update 2 to issue 22 ("for sd test")',
'id' =>
'updated' => '2009-06-12T05:55:48Z'
},
{
'content' => '<pre>first comment
</pre>
',
'name' => 'sunnavy',
'title' => 'Update 1 to issue 22 ("for sd test")',
'id' =>
'updated' => '2009-06-12T05:55:22Z'
},
]
=head1 AUTHOR
sunnavy C<< <sunnavy@bestpractical.com> >>
=head1 LICENCE AND COPYRIGHT
Copyright 2008-2010 Best Practical Solutions.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.