NAME
Finance::Bank::HSBC - Extract HSBC online banking data.
SYNOPSIS
use Finance::Bank::HSBC;
my @accounts = Finance::Bank::HSBC->extract_details(
bankingid => "IBnnnnnnnnnn",
seccode => "nnnnnn",
dateofbirth => "DDMMYY",
get_statements => 0, # or 1
get_transactions => 0, # or 1
# YYYY-MM-DD
earliest_statement_date => '2006-08-31',
# full account number(s) without spaces, as shown in online banking
# e.g. sortcodeACCOUNTNUMBER e.g. 987654012345678
# can be an array of several or a single value
accounts => [ 'nnnnnnnnnnnnnn' ],
);
foreach (@accounts) {
printf "%25s : %13s / %18s : GBP %8.2f\n",
$_->{name}, $_->{type}, $_->{account}, $_->{balance};
}
DESCRIPTION
This module provides a rudimentary interface to the HSBC online banking system at https://www.ebank.hsbc.co.uk/
. It provides the ability to extract account information, transaction history and statements.
DEPENDENCIES
You will need either Crypt::SSLeay
or IO::Socket::SSL
installed for HTTPS support to work with LWP. This module also depends on WWW::Mechanize
and HTML::TokeParser
for screen-scraping.
METHODS
- extract_details(%options)
-
Return an array of account hashes, one for each of your bank accounts. Below is a list of all the options that this method takes.
- generate_qif(\%account)
-
Generate a very basic QIF file from the account information stored in \%account. This method requires that the statement information was extracted for the account data passed in. An example would be:
my @accounts = Finance::Bank::HSBC->check_balance ( %options ); foreach ( @accounts ) { my $ac = $_->{account}; $ac =~ s/[^0-9]+//g; open FD, ">" . $ac . ".qif" || die ( "Can't write .qif - ". $@ ); print FD Finance::Bank::HSBC->generate_qif ( $_ ); close FD; }
- bankingid MANDATORY
-
Your own personal banking ID number. Along the lines of IBnnnnnnnnnnnn.
- seccode MANDATORY
-
The security code assigned to your bank account. Usually a 6 digit number, though we support upto 9 digits.
- dateofbirth MANDATORY
-
Your date of birth, in the format DDMMYY.
- get_statements OPTIONAL
-
Defaults to 0. Whether or not the script should extract statement information for the accounts that are being processed.
- get_transactions OPTIONAL
-
Defaults to 0. Whether or not the script should extract recent transaction information for the accounts that are being processed.
- earliest_statement_date OPTIONAL
-
When defined the script will extract data from every statement that has a "statement date" of at least "earliest_statement_date".
- accounts OPTIONAL
-
A single value, or array reference, of account numbers that should be processed. Only account numbers that are found will be processed, for obvious reasons. If this option is not present then all accounts that are listed on the main account overview page will have their details extracted.
ACCOUNT HASH DATA
The data returned is an array reference of hashes. Each of these hashes contains information about a particular account, explained below.
- name
-
Name of the account, e.g. "MR M WILSON".
- type
-
Type of the account, e.g. "STUDENT A/C".
- account
-
Account number, as it appears in online banking, i.e. "SORTCODE ACCOUNT_NUMBER".
- balance
-
The current balance of the account, e.g. "123.45" or "-1.23".
- transactions
-
The transaction key contains an array reference full of hash references - one for each transaction in the account's recent history. The transactions are stored from new to old.
- date
-
The date of the transaction, e.g. "JAN 02"
- type
-
The type of the transaction, e.g. "DD".
- desc
-
The description associated with the transaction, e.g. "NSPCC".
- paidin
-
The amount paid in during this transaction, which may be "", e.g. "10.00".
- paidout
-
The amount paid out during this transaction, which may be "", e.g. "10.00".
- balance
-
The account balance after this transaction occured, which may not be present, e.g. "12.00".
- statements
-
The statement key contains a hash reference, where each key is the date which a statement was issued (YYYY-MM-DD), and each value is an array reference which contains hash references - one for each statement entry extracted. The statement entries are stored from new to old.
- date
-
The date of the transaction, e.g. "JAN 02"
- type
-
The type of the transaction, e.g. "DD".
- desc
-
The description associated with the transaction, e.g. "NSPCC".
- paidin
-
The amount paid in during this transaction, which may be "", e.g. "10.00".
- paidout
-
The amount paid out during this transaction, which may be "", e.g. "10.00".
- balance
-
The account balance after this transaction occured, which may not be present, e.g. "12.00".
SEE ALSO
- Finance::Bank::LloydsTSB
-
This module was used a base for the original version of this module. See "THANKS", below.
WARNING
This warning is from Simon Cozens' Finance::Bank::LloydsTSB
, and seems just as apt here.
This is code for online banking, and that means your money, and that means BE CAREFUL. You are encouraged, nay, expected, to audit the source of this module yourself to reassure yourself that I am not doing anything untoward with your banking data. This software is useful to me, but is provided under NO GUARANTEE, explicit or implied.
THANKS
Simon Cozens for Finance::Bank::LloydsTSB, upon which most of the original code was based, Andy Lester (and Skud, by continuation) for WWW::Mechanize, Gisle Aas for HTML::TokeParser, Leon Cowle for updated login code after HSBC changed their HTML the first time.
A special thanks to Real Programmers Ltd http://realprogrammers.com/ for sponsoring development of the script in order to bring it up to date (22/01/2007).
AUTHOR
Matt Wilson <matt _at_ mattsscripts _dot_ co _dot_ uk>.
Original version by Chris Ball chris@cpan.org
.