NAME

Net::Blogger - an OOP-ish interface for accessing a weblog via the Blogger XML-RPC API.


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";


DESCRIPTION

Blogger.pm provides an OOP-ish interface for accessing a weblog via the Blogger XML-RPC API.


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 getRecentPost 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 getUsersBlogs 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.


PACKAGE METHODS

__PACKAGE__->new(\%args)

Instantiate a new Blogger object.

Valid arguments are :

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!


Blogger API METHODS

$pkg->getUsersBlogs()

Fetch the blogid, url and blogName for each of the Blogger blogs the current user is registered to.

Returns an array ref of hashes.

$pkg->newPost(\%args)

Add a new post to the Blogger server.

Valid arguments are :

If the length of postbody 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.

$pkg->getPost($postid)

Returns a hash ref, containing the following keys : userid, postid, content and dateCreated.

$pkg->getRecentPosts(\%args)

Fetch the latest (n) number of posts for a given blog. The most recent posts are returned first.

Valid arguments are

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

$pkg->editPost(\%args)

Update the Blogger database. Set the body of entry $postid to $body.

Valid arguments are :

If the length of postbody 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.

$pkg->deletePost(\%args)

Delete a post from the Blogger server.

Valid arguments are

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.

$pkg->setTemplate(\%args)

Set the body of the template matching type $type.

 "template is the HTML (XML, whatever -- Blogger can output any sort of text).
  Must contain opening and closing <Blogger> tags to be valid and accepted."
     --Evan

Valid arguments are

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.

$pkg->getTemplate(\%args)

Fetch the body of the template matching type $type.

Valid types are

Releases prior to Net::Blogger 0.85 accepted a list of arguments rather than a reference. Version 0.85+ are backwards compatible.

Returns a string.


EXTENDED METHODS

$pkg->GetBlogId(\%args)

Return the unique blogid for $args-{'blogname'}>.

Valid arguments are

Releases prior to Net::Blogger 0.85 accepted a list of arguments rather than a reference. Version 0.85+ are backwards compatible.

Returns a string. If no blogname is specified, the current blogid for the object is returned.

$pkg->DeleteAllPosts(\%args)

Delete all the posts on a weblog. Valid arguments are :

Releases prior to Net::Blogger 0.85 accepted a list of arguments rather than a reference. Version 0.85+ are backwards compatible.

$pkg->PostFromFile(\%args)

Open a filehandle, and while true, post to Blogger. If the length of the amount read from the file exceeds the per-post limit assigned by the Blogger servers -- currently 65,536 characters -- the contents of the file will be posted in multiple ``chunks''.

Valid arguments are

If a postid argument is present, the method will call the Blogger API editPost method with postid. Otherwise the method will call the Blogger API newPost method.

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 zero, or more, postids.

$pkg->PostFromOutline(\%args)

Like PostFromFile, only this time the file is an outliner document.

This method uses Simon Kittle's Text::Outline::asRenderedHTML method for posting. As of this writing, the Text::Outline package has not been uploaded to the CPAN. See below for a link to the homepage/source.

Valid outline formats are OPML, tabbed text outline, Emacs' outline-mode format, and the GNOME Think format.

Valid arguments are

If a postid argument is present, the method will call the Blogger API editPost method with postid. Otherwise the method will call the Blogger API newPost method.

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 zero, or more, postids.


VERSION

0.86


DATE

$Date: 2003/07/15 12:57:24 $


AUTHOR

Aaron Straup Cope


SEE ALSO

the Net::Blogger::API::Core manpage

the Net::Blogger::Engine::Base manpage

http://plant.blogger.com/api/


BUGS

Hopefully, few. Please reports all bugs to :

 http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Net::Blogger


LICENSE

Copyright (c) 2001-2003 Aaron Straup Cope.

This is free software, you may use it and distribute it under the same terms as Perl itself.