App-Chart
view release on metacpan or search on metacpan
unused/NZX-old.pm view on Meta::CPAN
# New Zealand Stock Exchange setups.
# Copyright 2007, 2008, 2009, 2010, 2011, 2012, 2017, 2018, 2024 Kevin Ryde
# This file is part of Chart.
#
# Chart is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 3, or (at your option) any later version.
#
# Chart is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along
# with Chart. If not, see <http://www.gnu.org/licenses/>.
#------------------------------------------------------------------------------
# dividends from HTML table
#
# This uses the dividend page at
#
use constant DIVIDENDS_URL =>
'https://www.nzx.com/markets/NZSX/dividends';
App::Chart::DownloadHandler::DividendsPage->new
(name => __('NZX dividends'),
pred => $pred_shares,
url => DIVIDENDS_URL,
parse => \÷nds_parse,
key => 'NZ-dividends',
# low priority so prices fetched first
priority => -10);
sub dividends_parse {
my ($resp) = @_;
### NZ dividends_parse() ...
# note: want wide-chars for HTML::TableExtract parse
my $body = $resp->decoded_content (raise_error => 1);
### $body
my @dividends = ();
my $h = { source => __PACKAGE__,
resp => $resp,
dividends => \@dividends,
copyright_key => 'NZ-dividends-copyright',
copyright => 'http://www.nzx.com/terms',
date_format => 'dmy', # dates like "27 Sep 2018"
prefer_decimals => 2,
};
# Column "Dividend Period" for "interim" or "final" not very interesting.
# FIXME: what's the "Supp." column?
require HTML::TableExtract;
my $te = HTML::TableExtract->new
(headers => ['Code',
'Ex',
'Payable',
'Amount',
'Currency',
'Imputation' ]);
$te->parse($body);
if (! $te->tables) {
die "NZX dividend table not matched";
}
foreach my $ts ($te->tables) {
foreach my $row ($ts->rows) {
my ($symbol, $ex_date, $pay_date, $amount, $currency, $imput)
= @$row;
push @dividends,
dividend_parse ($symbol, $ex_date,$pay_date,$amount, $currency,$imput);
}
}
my $count = scalar(@dividends);
App::Chart::Download::verbose_message ("NZX dividends total $count found");
return $h;
}
sub dividend_parse {
my ($symbol, $ex_date,$pay_date,$amount, $currency,$imput) = @_;
### NZ dividend_parse(): @_
# leading and trailing whitespace
$symbol = App::Chart::collapse_whitespace($symbol);
$amount = App::Chart::collapse_whitespace ($amount);
$imput = App::Chart::collapse_whitespace ($imput);
$currency = App::Chart::collapse_whitespace ($currency);
foreach ($amount, $imput) {
# eg. "3.900c" with c for cents, or latin-1 0xA2 cents symbol
if (s/ *[c\xA2]$//) {
$_ = App::Chart::Download::cents_to_dollars ($_);
}
# discard trailing zeros, when a whole number of cents
$_ = App::Chart::Download::trim_decimals ($_, 2);
}
( run in 0.577 second using v1.01-cache-2.11-cpan-5837b0d9d2c )