openbsd-ports/misc/p5-Finance-QuoteHist/patches/patch-lib_Finance_QuoteHist_Yahoo_pm
sturm 86f7645352 Initial import of Finance-QuoteHist 0.31
The Finance-QuoteHist bundle is several modules designed to fetch
historical stock quotes from the web.

WWW: http://www.mojotoad.com/sisk/projects/Finance-QuoteHist/

from Andrew Dalgleish <openbsd@andrewdalgleish.dyndns.org>
minor cleanup by me
2003-04-13 19:31:33 +00:00

55 lines
2.2 KiB
Plaintext

$OpenBSD: patch-lib_Finance_QuoteHist_Yahoo_pm,v 1.1.1.1 2003/04/13 19:31:33 sturm Exp $
--- lib/Finance/QuoteHist/Yahoo.pm.orig Thu Mar 27 14:42:18 2003
+++ lib/Finance/QuoteHist/Yahoo.pm Thu Mar 27 14:42:41 2003
@@ -21,8 +21,10 @@ use Date::Manip;
#
# Note that Yahoo implements month numbering with Jan=0 and Dec=11.
#
-# For CSV output, date ranges are unlimited; the output is adjusted
-# and does not include any split or dividend notices.
+# For CSV output, the output is adjusted and does not include any
+# split or dividend notices.
+# Date ranges are unlimited for some exchanges,
+# ASX (foo.AX) = 200 day blocks
#
# For HTML output, Yahoo takes arbitrary date ranges, but returns
# results in batches of 200, so we use 200 day blocks. Output is
@@ -97,7 +99,7 @@ sub quote_labels {
# in CSV since everything is pre-adjusted.
my $self = shift;
my @normal_labels = $self->SUPER::quote_labels();
- if (!$self->adjusted || $self->source_type eq 'html') {
+ if (!$self->adjusted || ($self->source_type && $self->source_type eq 'html')) {
return (@normal_labels, 'Adj');
}
@normal_labels;
@@ -159,10 +161,25 @@ sub _urls {
$self->source_type($source_mode);
if ($source_mode ne 'html') {
- # Single date block for CSV retrievals; Yahoo does not limit the
- # query range for CSV results.
$self->parse_mode('csv');
- $date_pairs{$start_date} = $end_date;
+ # Yahoo limits the query range for CSV results for certain symbols.
+ # ASX (foo.AX) = 200 day blocks
+ if ($ticker =~ /\.AX$/i) {
+ # Split the query range into 200-day blocks
+ my($low_date, $high_date);
+ $low_date = $start_date;
+ while (1) {
+ $high_date = DateCalc($low_date, '+ 200 days');
+ last if Date_Cmp($high_date, $end_date) == 1;
+ $date_pairs{$low_date} = $high_date;
+ $low_date = DateCalc($high_date, '+ 1 day');
+ }
+ # Last query block only needs to extend to end_date
+ $date_pairs{$low_date} = $end_date;
+ } else {
+ # All other symbols are unlimited - use a single query range.
+ $date_pairs{$start_date} = $end_date;
+ }
# hack for munged CSV on Yahoo...see csv_parser() below
++$self->{_yahoo_div_fix} if $mode eq 'dividend';
}