shapeways/lib/Shapeways.pm

65 lines
1.4 KiB
Perl

package Shapeways;
use Moose;
use MooseX::ClassAttribute;
use WWW::Mechanize::GZip;
use HTML::TreeBuilder::XPath;
use Data::Dumper;
use JSON::MaybeXS;
use Shapeways::Logger;
use Shapeways::Item;
class_has mech => (
is => 'ro',
lazy => 1,
builder => '_build_mech',
);
class_has base_url => (
is => 'ro',
default => 'https://www.shapeways.com/',
);
class_has config => (
is => 'ro',
lazy => 1,
default => sub {{username => $ARGV[0], password => $ARGV[1]}},
);
sub get_url {
my $self = shift;
my ($url) = @_;
log_debug {"Fetching: ", $url};
my $res = $self->mech->get($url);
if ($res->is_success) {
my $tree_path = HTML::TreeBuilder::XPath->new_from_content($res->content);
log_debug {"Fetch success"};
return ($tree_path, 200);
} else {
log_error {"Fetch failure => ", $res->code, " ", $res->status_line};
return (undef, $res->code);
}
}
sub _build_mech {
my $self = shift;
my $mech = WWW::Mechanize::GZip->new();
log_info {"Logging in"};
my $login = $mech->post('https://www.shapeways.com/login/json-shapeways', $self->config); # TODO better config?
my $s = decode_json $login->content;
if ($s->{success}) {
log_debug {"Logged in succesfully"};
return $mech
} else {
log_debug {"Failed to log in: ", $login->content};
die "login failed";
}
}
1;