WWW-A9Toolbar
view release on metacpan or search on metacpan
lib/WWW/A9Toolbar.pm view on Meta::CPAN
if(!$self->{email} || !$self->{password})
{
warn "No email or password specified!";
return;
}
if($self->{agent})
{
warn "Already connected!";
return;
}
my $agent = WWW::Mechanize->new( autocheck => 1 );
$self->{agent} = $agent;
my $formfiller = WWW::Mechanize::FormFiller->new();
$agent->env_proxy();
my $cookies = HTTP::Cookies->new();
$agent->cookie_jar($cookies);
$agent->get('http://a9.com/-/sign-in/a9SignIn.jsp?ss=1');
$agent->form(1) if $agent->forms and scalar @{$agent->forms};
$formfiller->add_filler( 'email' => Fixed => $self->{email} );
$formfiller->add_filler( 'password' => Fixed => $self->{password} );
$formfiller->fill_form($agent->current_form);
$agent->submit();
$self->{cookies} = $cookies;
$self->scan_cookies();
## What happens on error?
return 1;
}
sub customer_id
{
my ($self) = @_;
return $self->{'customer-id'} if($self->{'customer-id'});
if(!$self->{cookies})
{
warn "No cookies found, not connected?";
return undef;
}
$self->scan_cookies();
return $self->{'customer-id'} if($self->{'customer-id'});
return;
}
sub scan_cookies
{
my ($self) = @_;
return unless($self->{cookies});
my ($id, $prefs, $name, $perm);
my $scansub = sub {
my ($version, $key, $val, $path, $domain, $port, $path_spec, $secure, $expires, $discard, $hash) = @_;
if($domain eq 'a9.com')
{
$prefs = $val if($key eq 'a9Prefs');
$id = $val if($key eq 'a9id');
$name = $val if($key eq 'a9name');
$perm = $val if($key eq 'a9Perm');
}
};
$self->{cookies}->scan( $scansub );
$self->{'customer-id'} = $id;
$self->{prefs} = $prefs;
$self->{name} = $name;
$self->{perm} = $perm;
}
sub get_userdata
{
my ($self) = @_;
return $self->{userdata} if($self->{userdata});
my $uri = URI->new($self->{toolbarapiurl}, 'http');
my $method = 'basicuserdataunique';
$uri->query_param('method' => $method);
$uri->query_param('customer-id' => $self->customer_id());
# print $uri->as_string(), "\n";
$self->{agent}->get($uri->as_string());
# print $self->{agent}->content(), "\n";
my $xmlobj = XMLin($self->{agent}->content());
my $columns = $xmlobj->{columns};
my $newcolumns;
while($columns =~ s/\{id:"([^"]+)", name:"([^"]+)"\}//)
{
push @$newcolumns, {id => $1, name => $2};
}
$xmlobj->{columns} = $newcolumns;
$self->{userdata} = $xmlobj;
return $xmlobj;
}
sub get_bookmarks
{
my ($self, $args) = @_;
$args->{since} = $self->{lastbookmarkfetch} || 0
if(!defined $args->{since});
if($args->{since} < $self->{lastbookmarkfetch})
{
return $self->{bookmarks};
}
$args->{since} *= 1000 if($args->{since} < 9999999999);
my $uri = URI->new($self->{toolbarapiurl}, 'http');
my $method = 'GetBookmarksChangedSinceTime';
$uri->query_param('method' => $method);
$uri->query_param('customer-id' => $self->customer_id());
$uri->query_param('bmtimestamp' => $args->{since});
$uri->query_param('useAPI' => 2);
$uri->query_param('timestamp' => $args->{since});
$uri->query_param('clientid' => 2);
$uri->query_param('passback' => 1);
$self->{agent}->get($uri->as_string());
my $xmlobj = XMLin($self->{agent}->content(), ForceArray => ['BookmarkEntry']);
$self->{lastbookmarkfetch} = $xmlobj->{'a9'}{'getbookmarkschangedsincetime'}{'LastReturnedTimestamp'};
foreach my $bm (@{$xmlobj->{'a9'}{'getbookmarkschangedsincetime'}{'BookmarkEntry'}})
{
( run in 2.367 seconds using v1.01-cache-2.11-cpan-5a3173703d6 )