App-Chart
view release on metacpan or search on metacpan
lib/App/Chart/Intraday.pm view on Meta::CPAN
# 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/>.
package App::Chart::Intraday;
use 5.010;
use strict;
use warnings;
use App::Chart;
# uncomment this to run the ### lines
#use Smart::Comments;
sub command_line_download {
my ($class, $args) = @_;
## no critic (ProhibitExit, ProhibitExitInSubroutines)
my ($symbol, $mode) = @$args;
if (@$args != 2 || ref($symbol) || ref($mode)) {
print "Expect symbol and mode arguments for --intraday\n";
exit 1;
}
require App::Chart::IntradayHandler;
my $handler = App::Chart::IntradayHandler->handler_for_symbol_and_mode
($symbol, $mode);
if (! $handler) {
print "No intraday handler for symbol \"$symbol\" and mode \"$mode\"\n";
exit 1;
}
$handler->download ($symbol);
}
#------------------------------------------------------------------------------
sub write_intraday_image {
my %args = @_;
require App::Chart::DBI;
my $dbh = App::Chart::DBI->instance;
my $sth = $dbh->prepare_cached
('INSERT OR REPLACE INTO intraday_image (symbol, mode, image, error, fetch_timestamp, url, etag, last_modified)
VALUES (?,?,?,?,?,?,?,?)');
my $image = $args{'image'};
if (defined $image && length($image) == 0) { $image = undef; }
my $resp = $args{'resp'};
my $etag = (defined $resp ? scalar $resp->header('ETag') : undef);
my $last_modified = (defined $resp ? $resp->last_modified : undef);
my $symbol = $args{'symbol'};
my $mode = $args{'mode'};
$sth->bind_param (1, $symbol);
$sth->bind_param (2, $mode);
$sth->bind_param (3, $image, DBI::SQL_BLOB());
$sth->bind_param (4, $args{'error'});
$sth->bind_param (5, App::Chart::Download::timestamp_now());
$sth->bind_param (6, $args{'url'});
$sth->bind_param (7, $etag);
$sth->bind_param (8, $last_modified);
$sth->execute;
$sth->finish;
### send intraday-changed
### $symbol
### $mode
App::Chart::chart_dirbroadcast()->send ('intraday-changed', $symbol, $mode);
}
1;
__END__
# =for stopwords intraday
#
# =head1 NAME
#
# App::Chart::Intraday -- intraday image functions
#
# =head1 SYNOPSIS
#
# use App::Chart::Intraday;
#
# =head1 FUNCTIONS
#
# =over 4
#
# =item App::Chart::Intraday::write_intraday_image (key=>value, ...)
#
# The parameters are taken in key/value style
#
# symbol string
# mode string
# image raw bytes
# url string (optional)
# resp HTTP::Response object (optional)
#
# The C<image> bytes are stored in the database under C<symbol> and C<mode>.
# Optional C<url> and C<resp> can be given to record C<ETag> and
# C<Last-Modified> headers to possibly avoid a re-download next time.
#
# =back
( run in 1.026 second using v1.01-cache-2.11-cpan-2398b32b56e )