{ =head1 NAME Net::Blogger - (DEPRECATED) an OOP-ish interface for accessing a weblog via the Blogger XML-RPC API. =head1 SYNOPSIS use Net::Blogger; my $b = Net::Blogger->new(appkey=>APPKEY); $b->BlogId(BLOGID); $b->Username(USERNAME); $b->Password(PASSWORD); $b->BlogId($b->GetBlogId(blogname=>'superfoobar')); # Get recent posts my ($ok,@p) = $b->getRecentPosts(numposts=>20); if (! $ok) { croak $b->LastError(); } map { print "\t $_->{'postid'}\n"; } @p; # Post from a file my ($ok,@p) = $b->PostFromFile(file=>"/usr/blogger-test"); if (! $ok) { croak $b->LastError(); } # Deleting posts map { $b->deletePost(postid=>"$_") || croak $b->LastError(); } @p; # Getting and setting templates my $t = $b->getTemplate(type => 'main'); $b->setTemplate(type=>'main',template=>\$t) || croak $b->LastError(); # New post my $txt = "hello world."; my $id = $b->newPost(postbody=>\$txt) || croak $b->LastError(); # Get post my $post = $b->getPost($id) || croak $b->LastError(); print "Text for last post was $post->{'content'}\n"; =head1 DESCRIPTION B This module no longer works and is deprecated. In fact, as of this writing (2020-10-19), none of the CPAN modules for Blogger (including WebService::Blogger) currently work. Blogger.pm provides an OOP-ish interface for accessing a weblog via the Blogger XML-RPC API. =head1 ENGINES Blogger.pm relies on "engines" to implement it's functionality. The Blogger.pm package itself is little more than a wrapper file that happens to use a default "Blogger" engine is none other is specified. my $manila = Net::Blogger->new(engine=>"manila"); But wait!, you say. It's an API that servers implements and all I should have to do is changed the login data. Why do I need an engine? Indeed. Every server pretty much gets the spirit of the API right, but each implements the details slightly differently. For example : The MovableType XML-RPC server follows the spec for the I but because of the way Perl auto-vivifies hashes it turns out you can slurp all the posts for a blog rather than the just the 20 most recent. The Userland Manila server doesn't support the I method; the Userland RadioUserland server does. The Blogger server imposes a limit on the maximum length of a post. Other servers don't. (Granted the server in question will return a fault, if necessary, but Blogger.pm tries to do the right thing and check for these sorts of things before adding to the traffic on the network.) Lots of weblog-like applications don't support the Blogger API but do have a traditional REST interface. With the introduction of Blogger.pm "engines", support for these applications via the API can be added with all the magic happening behind the curtain, so to speak. =cut package Net::Blogger; use strict; use vars qw ( $AUTOLOAD $LAST_ERROR ); $Net::Blogger::VERSION = '1.03'; =head1 PACKAGE METHODS =cut =head2 __PACKAGE__->new(\%args) Instantiate a new Blogger object. Valid arguments are : =over 4 =item * B (required) String. Default is "blogger". =item * B String. The magic appkey for connecting to the Blogger XMLRPC server. =item * B String. The unique ID that Blogger uses for your weblog =item * B String. A valid username for blogid =item * B String. A valid password for the username/blogid pair. =back Releases prior to Net::Blogger 0.85 accepted a list of arguments rather than a reference. Version 0.85+ are backwards compatible. Returns an object. Woot! =head2 __PACKAGE__->init() Initializes the specified engine =cut sub new { my $pkg = shift; my $self = {}; bless $self,$pkg; $self->init(@_) || return undef; return $self; } sub init { my $self = shift; my $args = (ref($_[0]) eq "HASH") ? shift : { @_ }; my $engine = $args->{'engine'} || "blogger"; my $class = join("::",__PACKAGE__,"Engine",ucfirst $engine); eval "require $class"; if ($@) { print $@,"\n"; $LAST_ERROR = "Unrecognized implementation of the Blogger API."; return 0; } $self->{"_class"} = $class->new(%$args) || &{ $LAST_ERROR = Error->prior(); return 0; }; return 1; } =head1 Blogger API METHODS =head2 $pkg->getUsersBlogs() Fetch the I, I and I for each of the Blogger blogs the current user is registered to. Returns an array ref of hashes. =head2 $pkg->newPost(\%args) Add a new post to the Blogger server. Valid arguments are : =over 4 =item * B Scalar ref. I =item * B Boolean. =back If the length of I exceeds maximum length allowed by the Blogger servers -- 65,536 characters -- currently the text will be chunked into smaller pieces are each piece will be posted separately. Returns an array containing one, or more, post ids. =head2 $pkg->getPost($postid) Returns a hash ref, containing the following keys : userid, postid, content and dateCreated. =head2 $pkg->getRecentPosts(\%args) Fetch the latest (n) number of posts for a given blog. The most recent posts are returned first. Valid arguments are =over 4 =item * B Int. If no argument is passed to the method, default is 1. "NumberOfPosts is limited to 20 at this time. Let me know if this gets annoying. Letting this number get too high could result in some expensive db access, so I want to be careful with it." --Ev =back Releases prior to Net::Blogger 0.85 accepted a list of arguments rather than a reference. Version 0.85+ are backwards compatible. Returns true or false, followed by an array of hash refs. Each hash ref contains the following keys : postid,content,userid,dateCreated =head2 $pkg->editPost(\%args) Update the Blogger database. Set the body of entry $postid to $body. Valid arguments are : =over 4 =item * B (required) Scalar ref or a valid filehandle. =item * B (required) String. =item * B Boolean. =back If the length of I exceeds maximum length allowed by the Blogger servers -- 65,536 characters -- currently the text will be chunked into smaller pieces are each piece will be posted separately. Releases prior to Net::Blogger 0.85 accepted a list of arguments rather than a reference. Version 0.85+ are backwards compatible. Returns an array containing one, or more, post ids. =head2 $pkg->deletePost(\%args) Delete a post from the Blogger server. Valid arguments are =over 4 =item * B (required) String. =item * B Boolean. =back Releases prior to Net::Blogger 0.85 accepted a list of arguments rather than a reference. Version 0.85+ are backwards compatible. Returns true or false. =head2 $pkg->setTemplate(\%args) Set the body of the template matching type I<$type>. "template is the HTML (XML, whatever -- Blogger can output any sort of text). Must contain opening and closing tags to be valid and accepted." --Evan Valid arguments are =over 4 =item * B