package Shapeways; use Moose; use MooseX::ClassAttribute; use WWW::Mechanize::GZip; use HTML::TreeBuilder::XPath; use Data::Dumper; use JSON::MaybeXS; 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) = @_; my $res = $self->mech->get($url); if ($res->is_success) { my $tree_path = HTML::TreeBuilder::XPath->new_from_content($res->content); return ($tree_path, 200); } else { return (undef, $res->code); } } sub _build_mech { my $self = shift; my $mech = WWW::Mechanize::GZip->new(); 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}) { return $mech } else { die "login failed"; } } sub fetch_user { } sub fetch_list { # Do these exist? maybe this is a cart? } 1;