App-Chart

 view release on metacpan or  search on metacpan

lib/App/Chart/Suffix/NoSuffix.pm  view on Meta::CPAN

use Date::Parse;
use URI::Escape;
use Locale::TextDomain 'App-Chart';

use App::Chart::Glib::Ex::MoreUtils;
use App::Chart::Database;
use App::Chart::Download;
use App::Chart::Sympred;
use App::Chart::TZ;
use App::Chart::Yahoo;

my $shares_re = qr/^[^^][^.]+$/;
my $pred_shares = App::Chart::Sympred::Regexp->new ($shares_re);

$App::Chart::Yahoo::latest_pred->add ($pred_shares);
App::Chart::setup_source_help
  ($pred_shares, __p('manual-node','Yahoo Finance'));


# (yahoo-quote-delay! usa-symbol?
#   (lambda (symbol exchange)
#     ;; exchange is NasdaqSC, NasdaqNM, etc, not sure what the suffix bit is
#     (if (string-prefix-ci? "nasdaq" exchange)
# 	15    ;; NASDAQ
# 	20))) ;; AMEX, NYSE


#------------------------------------------------------------------------------
# weblinks - US company info

my $pred_nyse = App::Chart::Sympred::Proc->new
  (sub {
     my ($symbol) = @_;
     $symbol =~ $shares_re or return 0;
     my $exchange = symbol_exchange($symbol) // return 1;
     return ($exchange eq 'NYSE');
   });
my $pred_amex = App::Chart::Sympred::Proc->new
  (sub {
     my ($symbol) = @_;
     $symbol =~ $shares_re or return 0;
     my $exchange = symbol_exchange($symbol) // return 1;
     return ($exchange eq 'AMEX');
   });
my $pred_nasdaq = App::Chart::Sympred::Proc->new
  (sub {
     my ($symbol) = @_;
     $symbol =~ $shares_re or return 0;
     my $exchange = symbol_exchange($symbol) // return 1;
     # allow NasdaqNM, NasdaqSC etc
     return ($exchange =~ /^Nasdaq/i);
   });

App::Chart::Weblink->new
  (pred => $pred_nyse,
   name => __('NYSE _Company Information'),
   desc => __('Open web browser at the New York Stock Exchange page for this company'),
   proc => sub {
     my ($symbol) = @_;
     return 'http://www.nyse.com/about/listed/'
       . URI::Escape::uri_escape($symbol) . '.html';
   });
App::Chart::Weblink->new
  (pred => $pred_amex,
   name => __('AMEX _Company Information'),
   desc => __('Open web browser at the American Stock Exchange page for this company'),
   proc => sub {
     my ($symbol) = @_;
     return 'http://www.amex.com/?href=/equities/listCmp/EqLCCmpDesc.jsp?Product_Symbol=' . URI::Escape::uri_escape ($symbol);
   });
App::Chart::Weblink->new
  (pred => $pred_nasdaq,
   name => __('NASDAQ _Company Information'),
   desc => __('Open web browser at the NASDAQ page for this company'),
   proc => sub {
     my ($symbol) = @_;
     return 'http://quotes.nasdaq.com/asp/summaryquote.asp?symbol='
       . URI::Escape::uri_escape ($symbol);
   });

# return exchange name string, or undef if not known
sub symbol_exchange {
  my ($symbol) = @_;
  require App::Chart::DBI;
  return (App::Chart::DBI->read_single
          ('SELECT exchange FROM info WHERE symbol=?', $symbol)
          //
          App::Chart::DBI->read_single
          ('SELECT exchange FROM latest WHERE symbol=?', $symbol));
}


#------------------------------------------------------------------------------

our @to_suffix =
  (
   # ^AEX
   [ '^AEX', '.AS' ],

   # ^ATX vienna
   # and must avoid ^ATLI and similar below
   [ '^ATX', '.VI' ],

   [ '^AX',   '.AX' ], # several, inc ^AXJO, ^AXPJ
   [ '^AORD', '.AX' ], # all ords
   [ '^ATLI', '.AX' ], # asx 20
   [ '^AFLI', '.AX' ], # asx 50
   [ '^ATOI', '.AX' ], # asx 100

   # ^BFX belgium
   [ '^BF', sub {
       my $pred = App::Chart::Sympred::Prefix->new ('^BF');
       my $timezone_brussels = App::Chart::TZ->new
         (name     => __('Brussels'),
          choose   => [ 'Europe/Brussels' ],
          fallback => 'CET-1');
       $timezone_brussels->setup_for_symbol ($pred);

       # only home page for now ...
       App::Chart::Weblink->new
           (pred => $pred,
            name => __('Brussels Stock Exchange Home Page'),
            desc => __('Open web browser at the Brussels Stock Exchange home page'),
            # now part of euronext ...
            url  => 'http://www.stockexchange.be');
     } ],

   # ^BVSP bovespa
   [ '^BV', '.SA' ],

   # ^BSESN bse sensitive
   [ '^BSE', '.BO' ],

   # ^CASE30
   [ '^CASE', '.CA' ],

   # ^CLDOW
   # ^CLDOWD



( run in 0.900 second using v1.01-cache-2.11-cpan-39bf76dae61 )