Finance-Bank-Cahoot
view release on metacpan or search on metacpan
lib/Finance/Bank/Cahoot.pm view on Meta::CPAN
$self->_test_content_for_error;
my $te = HTML::TableExtract->new(headers => ['Payable to', 'Reference is']);
$te->parse(decode_utf8 $self->{_mech}->content);
my $table = _trim_table([$te->first_table_found->rows]);
foreach my $row (@{$table}) {
push @debits, Finance::Bank::Cahoot::DirectDebit->new($row);
}
}
return \@debits;
}
sub snapshot
{
my ($self, $account) = @_;
$self->login();
$self->set_account($account) if defined $account;
croak 'No account currently selected' if not defined $self->{_current_account};
$self->_get('/servlet/com.aquariussecurity.accounts.servlet.CurrentAccountStatusServlet?origin=print');
my $te = HTML::TableExtract->new(headers => ['Date', 'Transaction Details', 'Withdrawn', 'Paid In']);
$te->parse($self->{_mech}->content);
my @table = $te->first_table_found->rows;
return Finance::Bank::Cahoot::Statement->new(_trim_table \@table);
}
sub accounts
{
my ($self) = @_;
$self->login();
$self->_get('/AquariusSecurity/web/en/core_banking/personal_homepage/frameset_personal_homepage.html');
$self->_get_frames;
my $content = $self->{_mech}->content();
my @account_details = ($content =~ m/(PersonalHomepageSelectionServlet.*?"go\s+to\s+.*?")/gsi);
my @accounts;
foreach my $account (@account_details) {
$account =~ m/(available\s+balance|payment\s+this\s+month):.*?([\-0-9\.]+).*(current\s+balance|payment\s+this\s+month):.*?([\-0-9\.]+).*?productType=MTA&Index=(\d+).*?="go\s+to\s+(.*?)\s+(\d+)"/gsi;
push @accounts, { name => _trim($6),
account => $7,
account_index => $5,
balance => $4,
available => $2 };
}
$self->{_accounts} = \@accounts;
return \@accounts;
}
1;
__END__
=for stopwords online HTTPS login Login Connell Belka
=head1 NAME
Finance::Bank::Cahoot - Check your Cahoot bank accounts from Perl
=head1 DESCRIPTION
This module provides a rudimentary interface to the Cahoot online
banking system at C<https://www.cahoot.com/>. You will need
either C<Crypt::SSLeay> or C<IO::Socket::SSL> installed for HTTPS
support to work with WWW::Mechanize.
=head1 SYNOPSIS
my $cahoot = Finance::Bank::Cahoot->new(credentials => 'Constant',
credentials_options => {
account => '12345678',
password => 'verysecret',
place => 'London',
date => '01/01/1906',
username => 'dummy',
maiden => 'Smith' } );
my $accounts = $cahoot->accounts;
$cahoot->set_account($accounts->[0]->{account});
my $snapshot = $cahoot->snapshot;
foreach my $row (@$snapshot) {
print join ',', @$row; print "\n";
}
=head1 METHODS
=over 4
=item B<new>
Create a new instance of a connection to the Cahoot server.
C<new> can be called in two different ways. It can take a single parameter,
C<credentials>, which will accept an already created credentials object, of type
C<Finance::Bank::Cahoot::CredentialsProvider::*>. Alternatively, it can take two
parameters, C<credentials> and C<credentials_options>. In this case
C<credentials> is the name of a credentials class to create an instance of, and
C<credentials_options> is a hash of the options to pass-through to the
constructor of the chosen class.
If the second form of C<new> is being used, and the chosen class is I<not> one
of the ones supplied as standard then it will need to be C<required> first.
If any errors occur then C<new> will C<croak>.
my $cahoot = Finance::Bank::Cahoot->new(credentials => 'Constant',
credentials_options => {
account => '12345678',
password => 'verysecret',
place => 'London',
date => '01/01/1906',
username => 'dummy',
maiden => 'Smith' } );
# Or create the credentials object ourselves
my $credentials = Finance::Bank::Cahoot::CredentialsProvider::Constant->new(
account => '12345678', password => 'verysecret', place => 'London',
date => '01/01/1906', username => 'dummy', maiden => 'Smith' } );
my $cahoot = Finance::Bank::Cahoot->new(credentials => $credentials);
=item B<login>
Login to the Cahoot server using the credentials supplied to C<new>. This method
is implicit for all data access methods, so typically does not need to be called
( run in 3.095 seconds using v1.01-cache-2.11-cpan-84de2e75c66 )