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 )