App-Chart
view release on metacpan or search on metacpan
lib/App/Chart/Finance/Yahoo/Exchanges.pm view on Meta::CPAN
# wash two spaces in "Chicago Mercantile ..." to one
foreach (values %entry) { s/\s+/ /g; }
# US suffix N/A means no suffix
if ($entry{'suffix'} eq 'N/A') { $entry{'suffix'} = ''; }
# Delay like "15 min", or "15 min**" with footnote for NS India
#
if ($entry{'delay_minutes'} =~ /^(\d+) min/) {
$entry{'delay_minutes'} = $1;
} else {
warn "Yahoo exchanges page unrecognised delay: \"$entry{delay_minutes}\"\n";
$entry{'delay_minutes'} = 20; # assumed default
}
push @entries, \%entry;
}
return $h;
}
sub timestamp_now {
return timet_to_timestamp(time());
}
sub timet_to_timestamp {
my ($t) = @_;
require POSIX;
return POSIX::strftime ('%Y-%m-%d %H:%M:%S+00:00', gmtime($t));
}
#------------------------------------------------------------------------------
# containing arefs [$pred,'.XX']
my @quote_delay_aliases;
sub setup_quote_delay_alias {
my ($pred, $suffix) = @_;
push @quote_delay_aliases, [ $pred, $suffix ];
}
sub symbol_quote_delay {
my ($symbol) = @_;
# indexes all in real time
if ($symbol =~ /^\^/) {
return 0;
}
my $suffix = ($symbol =~ /(\.[^.]+)$/ && $1);
my $h = exchanges_data();
my $delay = $h->{$suffix};
if (! defined $delay) {
if (my $elem = List::Util::first { $_->[0]->match ($symbol) }
@quote_delay_aliases) {
$suffix = $elem->[1];
$delay = $h->{$suffix};
}
}
if (! defined $delay) {
# guess default 20 minutes
$delay = 20;
}
return $delay;
}
1;
__END__
( run in 1.696 second using v1.01-cache-2.11-cpan-39bf76dae61 )