86f7645352
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
55 lines
2.2 KiB
Plaintext
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';
|
|
}
|