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 )