Dave Cross: Still Munging Data With Perl: Online event - Mar 17 Learn more

use strict;
use Moose;
use JSON;
our $VERSION = '0.02';
has _ua => (
is => 'rw',
lazy => 1
required => 1,
default => sub { LWP::UserAgent->new; }
);
has _service_url => (
is => 'ro',
isa => 'Str',
required => 1
);
sub upload_by_url {
my ($self, $img_url) = @_;
my $req = $self->_ua->get($self->_service_url . $img_url);
my $json = JSON->new->allow_nonref;
my $resp = $json->decode($req->content);
return 1
if($self->_create_attrs_from_json($resp));
return 0;
}
sub _create_attrs_from_json {
my ($self, $json) = @_;
for (keys $json) {
$self->meta->add_attribute($_, is => 'rw');
$self->$_($json->{$_});
}
$self->meta->make_immutable;
return 0
if not keys $json
or defined $json->{error};
return 1;
}
1;
__END__
=encoding utf8
=head1 NAME
WWW::Yahoo::Smushit - Perl interface to Yahoo Smushit image optimizer
=head1 SYNOPSIS
my $st = new WWW::Yahoo::Smushit;
printf("Image url:\t%s\nNew image:\t%s\nNew size:\t%s\nOld size:\t%s\nPercent:\t%s%%\n",
$st->src, $st->dest, $st->dest_size, $st->src_size, $st->percent);
}
else {
printf("Oops! Something is wrong...\n\nError:\t%s\n", $st->error);
}
=head1 DESCRIPTION
Smush.it is a service to optimize images, removing some unnecessary data.
=head1 METHODS
=head2 upload_by_url($img_url)
Send a request to the Smushit via http and retrieves the JSON object.
=head1 INTERNALS
=head2 _create_attrs_from_json
Get the JSON and create the attributes.
=head2 SEE ALSO
L<Smushit|http://smush.it/>.
=head1 AUTHOR
Junior Moraes <fvox@cpan.org>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2011 by Junior Moraes
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.4 or, at your option, any later version of Perl 5 you may have available.
=cut