Net-Google-Blogger
view release on metacpan or search on metacpan
lib/Net/Google/Blogger/Blog.pm view on Meta::CPAN
package Net::Google::Blogger::Blog;
use warnings;
use strict;
use Any::Moose;
use XML::Simple ();
use URI::Escape ();
use Net::Google::Blogger::Blog::Entry;
our $VERSION = '0.09';
has id => ( is => 'ro', isa => 'Str', required => 1 );
has numeric_id => ( is => 'ro', isa => 'Str', required => 1 );
has title => ( is => 'rw', isa => 'Str', required => 1 );
has public_url => ( is => 'ro', isa => 'Str', required => 1 );
has id_url => ( is => 'ro', isa => 'Str', required => 1 );
has post_url => ( is => 'ro', isa => 'Str', required => 1 );
has source_xml_tree => ( is => 'ro', isa => 'HashRef', required => 1 );
has blogger => ( is => 'ro', isa => 'Net::Google::Blogger', required => 1 );
has entries => (
is => 'rw',
isa => 'ArrayRef[Net::Google::Blogger::Blog::Entry]',
lazy_build => 1,
auto_deref => 1,
);
__PACKAGE__->meta->make_immutable;
sub BUILDARGS {
## Parses source XML into initial attribute values.
my $class = shift;
my %params = @_;
my $id = $params{source_xml_tree}{id}[0];
my $links = $params{source_xml_tree}{link};
return {
id => $id,
numeric_id => $id =~ /(\d+)$/,
title => $params{source_xml_tree}{title}[0]{content},
id_url => (grep $_->{rel} eq 'self', @$links)[0]{href},
public_url => (grep $_->{rel} eq 'alternate', @$links)[0]{href},
post_url => (grep $_->{rel} =~ /#post$/, @$links)[0]{href},
%params,
};
}
sub _build_entries {
## Populates the entries attribute, loading all entries for the blog.
my $self = shift;
# Search with no parameters.
return $self->search_entries;
}
sub search_entries {
## Returns entries matching search criteria.
my $self = shift;
my %params = @_;
# Construct request URL, incorporating category criteria into it, if given.
my $url = 'http://www.blogger.com/feeds/' . $self->numeric_id . '/posts/default';
$url .= '/-/' . join '/', map URI::Escape::uri_escape($_), @{ $params{categories} }
if $params{categories};
# Map our parameter names to Blogger's.
my %params_to_req_args_map = (
max_results => 'max-results',
published_min => 'published-min',
published_max => 'published-max',
updated_min => 'updated-min',
updated_max => 'updated-max',
order_by => 'orderby',
offset => 'start-index',
( run in 0.950 second using v1.01-cache-2.11-cpan-39bf76dae61 )