{ =head1 NAME Net::Blogger::Engine::Userland::metaWeblog - UserLand metaWeblog API engine =head1 SYNOPSIS my $radio = Blogger->new(engine=>"radio"); $radio->Proxy(PROXY); $radio->Username(USERNAME); $radio->Password(PASSWORD); $radio->metaWeblog()->newPost( title=>"hello", description=>"world", publish=>1, ); =head1 DESCRIPTION Implements the UserLand metaWeblog API functionality. This package is meant to be subclassed. It should not be used on it's own. =cut package Net::Blogger::Engine::Userland::metaWeblog; use strict; $Net::Blogger::Engine::Userland::metaWeblog::VERSION = '1.0'; @Net::Blogger::Engine::Userland::metaWeblog::ISA = qw ( Exporter Net::Blogger::Engine::Base ); @Net::Blogger::Engine::Userland::metaWeblog::EXPORT = qw (); @Net::Blogger::Engine::Userland::metaWeblog::EXPORT_OK = qw (); use Exporter; use Net::Blogger::Engine::Base; =head1 OBJECTS METHODS =head2 $pkg->newPost(\%args) Valid arguments are : =over 4 =item * B String. =item * B<link> =item * B<description> String. =item * B<categories> Array reference. =item * B<publish> 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 an int, or false. =cut sub newPost { my $self = shift; my $args = (ref($_[0]) eq "HASH") ? shift : {@_}; my $publish = 0; if (exists $args->{publish}) { $publish = $args->{publish}; delete $args->{publish}; } if (($args->{categories}) && (ref($args->{categories}) ne "ARRAY")) { $self->LastError("Categories must be passed as an array reference."); return 0; } my $call = $self->_Client->call( "metaWeblog.newPost", $self->_Type(string=>$self->BlogId()), $self->_Type(string=>$self->Username()), $self->_Type(string=>$self->Password()), $self->_Type(hash=>$args), $self->_Type(boolean=>$publish), ); return ($call) ? $call->result() : return 0; } =head2 $pkg->newMediaObject(\%args) Valid argument are : =over =item * B<file> String. Path to the file you're trying to upload. If this argument is present the package will try to load I<MIME::Base64> for automagic encoding. =item * B<name> String. "It may be used to determine the name of the file that stores the object, or to display it in a list of objects. It determines how the weblog refers to the object. If the name is the same as an existing object stored in the weblog, it replaces the existing object." [1] If a I<file> argument is present and no I<name> argument is defined, this property will be defined using the I<File::Basename::basename> function. =item * B<type> String. "It indicates the type of the object, it's a standard MIME type, like audio/mpeg or image/jpeg or video/quicktime." [1] If a I<file> argument is present and no I<type> argument is defined, the package will try setting this property using the I<File::MMagic> package. =item * B<bits> Base64-encoded binary value. The content of the object. If a I<file> argument is present, the package will try setting this property using the I<MIME::Base64> package. =back Releases prior to Net::Blogger 0.85 accepted a list of arguments rather than a reference. Version 0.85+ are backwards compatible. Returns a hash reference, or undef. =cut sub newMediaObject { my $self = shift; my $args = (ref($_[0]) eq "HASH") ? shift : {@_}; # if ($args->{file}) { my $pkg = "MIME::Base64"; eval "require $pkg"; if ($@) { $self->LastError("Failed to load $pkg for automagic encoding, $@"); return undef; } open(FILE, $args->{file}) or &{ $self->LastError("Failed to open $args->{file} for reading, $!"); return undef; }; my $buf = undef; while (read(FILE, $buf, 60*57)) { $args->{bits} .= &{$pkg."::encode_base64"}($buf); } close FILE; # if (! $args->{type}) { eval "require $pkg"; if ($@) { $self->LastError("Failed to load $pkg for automagic type checking $@"); return undef; } # my $mm = undef; eval { $mm = $pkg->new(); }; if ($@) { $self->LastError("Failed to instantiate $pkg for automagic type checking, $@"); return undef; } $args->{type} = $mm->checktype_filename($args->{file}); if (! $args->{type}) { $self->LastError("Unable to determine file type "); } } # if (! $args->{name}) { require "File::Basename"; $args->{name} = File::Basename::basename($args->{file}); } } # else { foreach ("name","type","bin") { if (! $args->{$_}) { $self->LastError("You must define a value for the $_ property."); return undef; } } } # my $call = $self->_Client->call( "metaWeblog.newMediaObject", $self->_Type(string=>$self->BlogId()), $self->_Type(string=>$self->Username()), $self->_Type(string=>$self->Password()), $self->_Type(hash=>$args), ); return ($call) ? $call->result() : undef; } =head2 $pkg->editPost(\%args) =over 4 =item * B<postid> Int. I<required> =item * B<title> String. =item * B<link> =item * B<description> String. =item * B<categories> Array reference. =item * B<publish> 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. =cut sub editPost { my $self = shift; my $args = (ref($_[0]) eq "HASH") ? shift : {@_}; my $postid = $args->{postid}; if (! $postid) { $self->LastError("You must specify a postid"); return 0; } delete $args->{postid}; if (($args->{categories}) && (ref($args->{categories}) ne "ARRAY")) { $self->LastError("Categories must be passed as an array reference."); return 0; } my $publish = 0; if (exists $args->{publish}) { $publish = $args->{publish}; delete $args->{publish}; } my $call = $self->_Client->call( "metaWeblog.editPost", $postid, $self->_Type(string=>$self->Username()), $self->_Type(string=>$self->Password()), $self->_Type(hash=>$args), $self->_Type(boolean=>$publish), ); return ($call) ? $call->result() : undef; } =head2 $pkg->getPost(\%args) Valid arguments are : =over 4 =item * B<postid> Int. I<required> =back Releases prior to Net::Blogger 0.85 accepted a list of arguments rather than a reference. Version 0.85+ are backwards compatible. Returns a hash reference or undef. =cut sub getPost { my $self = shift; my $args = (ref($_[0]) eq "HASH") ? shift : {@_}; my $postid = $args->{postid}; if (! $postid) { $self->LastError("You must specify a postid"); return 0; } my $call = $self->_Client->call( "metaWeblog.getPost", $postid, $self->_Type(string=>$self->Username()), $self->_Type(string=>$self->Password()), ); return ($call) ? $call->result() : undef; } =head2 $pkg->getCategories() Returns an array reference or undef. =cut sub getCategories { my $self = shift; if ($self->{'__parent'} eq "Movabletype") { $self->LastError("This method is not supported by the $self->{'__parent'} engine."); return undef; } my $call = $self->_Client()->call( "metaWeblog.getCategories", $self->_Type(string=>$self->BlogId()), $self->_Type(string=>$self->Username()), $self->_Type(string=>$self->Password()), ); return ($call) ? $call->result() : undef; } =head1 VERSION 1.0 =head1 DATE $Date: 2005/03/26 19:29:08 $ =head1 AUTHOR Aaron Straup Cope =head1 SEE ALSO http://www.xmlrpc.com/metaWeblogApi http://groups.yahoo.com/group/weblog-devel/message/200 =head1 FOOTNOTES =over =item [1] http://www.xmlrpc.com/discuss/msgReader$2393 =back =head1 LICENSE Copyright (c) 2002-2005 Aaron Straup Cope. All Rights Reserved. This is free software, you may use it and distribute it under the same terms as Perl itself. =cut return 1; }