Finance-Bank-SCSB-TW
view release on metacpan or search on metacpan
lib/Finance/Bank/SCSB/TW.pm view on Meta::CPAN
package Finance::Bank::SCSB::TW;
use 5.008;
our $VERSION = '0.14';
use strict;
use utf8;
use Carp;
use WWW::Mechanize;
use HTML::Selector::XPath qw(selector_to_xpath);
use HTML::TreeBuilder::XPath;
use List::MoreUtils qw(mesh);
use Finance::Bank::SCSB::TW::CurrencyExchangeRateCollection;
{
my $ua;
sub ua {
return $ua if $ua;
$ua = WWW::Mechanize->new(
env_proxy => 1,
keep_alive => 1,
timeout => 60,
);
$ua->agent_alias("Mac Mozilla");
return $ua;
}
}
sub _login {
my ($id, $username, $password, $menu) = @_;
$menu ||= "menu1";
ua->get('https://ibank.scsb.com.tw/');
ua->get('https://ibank.scsb.com.tw/mainbody.jsp');
ua->submit_form(
form_name => 'loginForm',
fields => {
userID => $id,
loginUID => $username
}
);
ua->submit_form(
form_name => 'loginForm',
fields => {
password => $password,
'wlw-radio_button_group_key:{actionForm.loginAP}' => $menu
}
);
return ua->content;
}
sub logout {
ua->get("https://ibank.scsb.com.tw/logout.do");
}
sub css {
selector_to_xpath(shift)
}
sub _cssQuery {
my ($content, $selector) = @_;
my $tree = HTML::TreeBuilder::XPath->new;
$tree->parse($content);
$tree->findnodes( selector_to_xpath($selector) );
}
sub check_balance {
my ($id, $username, $password) = @_;
die "Invalid parameters." unless $id && $username && $password;
my $content = _login($id, $username, $password, "menu3");
my $nodes = _cssQuery($content, ".txt07 div[align='center'], .txt10 div[align='center'] span");
my %balance = ( map { $_->as_trimmed_text } @$nodes );
for (keys %balance) {
( run in 2.599 seconds using v1.01-cache-2.11-cpan-6aa56a78535 )