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 )