65 lines
1.4 KiB
Perl
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;
|