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 )