WWW::Twitpic::API - Twitpic simple API


WWW-Twitpic documentation Contained in the WWW-Twitpic distribution.

Index


Code Index:

NAME

Top

WWW::Twitpic::API - Twitpic simple API

VERSION

Top

Version 0.02

SYNOPSIS

Top

    use WWW::Twitpic::API;

    my $client = WWW::Twitpic::API->new(
        username => 'a twitter username',
        password => 'the big secret'
    );

    # post a new image to the twitter feed
    $clent->post( '/path/to/image_filename' => 'The message for this pic' );

    # or just upload the image to twitpic
    $client->upload( '/path/to/image_filename' );




METHODS

Top

username set/get the twitter username

password set/get the password for the username provided.

ua Set/get the user agent make API calls. LWP::UserAgent->new() by default.

uri Base URI to the API.

response The WWW::Twitpic::API::Response from the last post or upload.

has_response Check if exists a reponse.

meta See Moose. =cut

upload

    Upload the provided image to twitpic.com

    Returns WWW::Twitpic::API::Response

    Example: $api->upload( '/tmp/my_picture.jpg' );

    See L<http://twitpic.com/api.do#upload>

post

    Upload the provided image to twitpic.com and post it
    on the username twitter feed with the optional
    message provided.

    Returns WWW::Twitpic::API::Response

    Example: $api->post( '/tmp/my_picture.jpg' => "Look ma, I'm on twitter!");

    See L<http://twitpic.com/api.do#uploadAndPost>

_make_request

    Create and POST a request and return a Twitpic::API::Response.

AUTHOR

Top

Diego Kuperman, <diego at freekeylabs.com>

BUGS

Top

Please report any bugs or feature requests to bug-www-twitpic-api at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=WWW-Twitpic. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc WWW::Twitpic




You can also look for information at:

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=WWW-Twitpic

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/WWW-Twitpic

* CPAN Ratings

http://cpanratings.perl.org/d/WWW-Twitpic

* Search CPAN

http://search.cpan.org/dist/WWW-Twitpic

ACKNOWLEDGEMENTS

Top

COPYRIGHT & LICENSE

Top


WWW-Twitpic documentation Contained in the WWW-Twitpic distribution.
package WWW::Twitpic::API;
use Moose;
use Moose::Util::TypeConstraints;

use LWP::UserAgent;
use HTTP::Request::Common;
use URI;

use WWW::Twitpic::API::Response;

our $VERSION = '0.01';

coerce 'WWW::Twitpic::API::Response'
    => from 'Str'
     => via { WWW::Twitpic::API::Response->new( xml => $_ ) };

has 'username' => (
    is      => 'rw',
    isa     => 'Str'
);

has 'password' => (
    is      => 'rw',
    isa     => 'Str'
);

has 'ua' => (
    is      => 'rw',
    isa     => 'LWP::UserAgent',
    lazy    => 1,
    default => sub { LWP::UserAgent->new() }
);

has 'uri' => (
    is      => 'rw',
    isa     => 'URI',
    default => sub { URI->new('http://twitpic.com') }
);

has 'response' => (
    is        => 'rw',
    isa       => 'WWW::Twitpic::API::Response',
    predicate => 'has_response',
    coerce    => 1
);

sub upload {
    my ( $self, $file ) = @_; 

    $self->_make_request({ 
        path  => '/api/upload',
        media => [ $file ] 
    });
}

sub post {
    my ( $self, $file, $message ) = @_; 

    $self->_make_request({ 
        path  => '/api/uploadAndPost',
        media   => [ $file ],
        message => $message
    });
}

sub _make_request {
    my ( $self, $args ) = @_;

    my $url = $self->uri->clone;
    if ( my $path = delete $args->{path} ) {
        $url->path( $path );
    }
    else { confess 'We need a path to make a request' }

    my $res = $self->ua->request(
        POST(
            $url,
            Content_Type => 'form-data',
            Content      => [ 
                username => $self->username,
                password => $self->password,
                %$args
            ]
        )
    );

    if ( $res->is_success ) {
        $self->response( $res->content );
        return $self->response;
    }
    else {
        confess "Can't post to the server: " . $res->status_line;
    }
}

1;