Provided by: libfinance-quotehist-perl_1.27-1_all bug

NAME

       Finance::QuoteHist::Generic - Base class for retrieving historical stock quotes.

SYNOPSIS

         package Finance::QuoteHist::MyFavoriteSite;
         use strict;
         use vars qw(@ISA);
         use Finance::QuoteHist::Generic;
         @ISA = qw(Finance::QuoteHist::Generic);

         sub url_maker {
           # This method returns a code reference for a routine that, upon
           # repeated invocation, will provide however many URLs are necessary
           # to fully obtain the historical data for a given target mode and
           # parsing mode.
         }

DESCRIPTION

       This is the base class for retrieving historical stock quotes. It is built around
       LWP::UserAgent. Page results are currently parsed as either CSV or HTML tables.

       In order to actually retrieve historical stock quotes, this class should be subclassed and
       tailored to a particular web site. In particular, the "url_maker()" factory method should
       be overridden, which provides a code reference to a routine that provides however many
       URLs are necessary to retrieve the data over a list of symbols within the given date
       range, for a particular target (quotes, dividends, splits).  Different sites have
       different formats and different limitations on how many quotes are returned for each
       query. See Finance::QuoteHist::Yahoo for an example of how to do this.

       For more complicated sites, such as Yahoo, overriding additional methods might be
       necessary for dealing with things such as splits and dividends.

METHODS

       new()
           Returns a new Finance::QuoteHist::Generic object.  Valid attributes are:

           start_date
           end_date
               Specify the date range from which you would like historical quotes.  These dates
               get parsed by the "ParseDate()" method in Date::Manip, so see Date::Manip(3) for
               more information on valid date strings. They are quite flexible, and include such
               strings as '1 year ago'. Date boundaries can also be dynamically set with methods
               of the same name. The absence of a start date means go to the beginning of the
               history. The absence of an end date means go up to the most recent historical
               date. The absence of both means grab everything.

           symbols
               Indicates which ticker symbols to include in the search for historical quotes.
               Passed either as a string (for single ticker) or an array ref for multiple
               tickers.

           granularity
               Returns rows at 'daily', 'weekly', or 'monthly' levels of granularity.  Defaults
               to 'daily'.

           attempts
               Sets how persistently the module tries to retrieve the quotes. There are two
               places this will manifest. First, if there are what appear to be network errors,
               this many network connections are attempted for that URL. Secondly, for quotes
               only, if pages were successfully retrieved, but they contained no quotes, this
               number of attempts are made to retrieve a document with data. Sometimes sites will
               report a temporary internal error via HTML, and if it is truly transitory this
               will usually get around it. The default is 3.

           lineup
               Passed as an array reference (or scalar for single class), this list indicates
               which Finance::QuoteHist::Generic sub classes should be invoked in the event this
               class fails in its attempt to retrieve historical quotes. In the event of failure,
               the first class in this list is invoked with the same parameters as the original
               class, and the remaining classes are passed as the lineup to the new class. This
               sets up a daisy chain of redundancy in the event a particular site is hosed.  See
               Finance::QuoteHist(3) to see an example of how this is done in a top level
               invocation of these modules. This list is empty by default.

           quote_precision
               Sets the number of decimal places to which quote values are rounded.  This might
               be of particular significance if there is auto-adjustment taking place (which is
               only under particular circumstances currently...see Finance::QuoteHist::Yahoo).
               Setting this to 0 will disable the rounding behavior, returning the quote values
               as they appear on the sites (assuming no auto-adjustment has taken place). The
               default is 4.

           row_filter
               When provided a subroutine reference, the routine is invoked with an array
               reference for each raw row retrieved from the quote source. This allows user-
               defined filtering or formatting for the items of each row. This routine is invoked
               before any built-in routines are called on the row. The array must be modified
               directly rather than returned as a value. Use sparingly since the built-in
               filtering and normalizing routines do expect each row to more or less look like
               historical stock data. Rearranging the order of the columns in each row is
               contraindicated.

           env_proxy
               When set, instructs the underlying LWP::UserAgent to load proxy configuration
               information from environment variables. See the "ua()" method and LWP::UserAgent
               for more information.

           auto_proxy
               Same as env_proxy, but tests first to see if $ENV{http_proxy} is present.

           verbose
               When set, many status messages are printed to STDERR indicating progression
               through URLs and lineup invocations.

           quiet
               When set, certain failure messages are suppressed from appearing on STDERR. These
               messages would normally appear regardless the setting of the "verbose" flag.

       The following methods are the primary user interface methods; methods of interest to
       developers wishing to make their own site-specific instance of this module will find
       information on overriding methods further below.

       quotes()
           Retrieves historical quotes for all provided symbols over the specified date range.
           Depending on context, returns either a list of rows or an array reference to the same
           list of rows.

       dividends()
       splits()
           If available, retrieves dividend or split information for all provided symbols over
           the specified date range. If there are no site-specific subclassed modules in the
           lineup capable of getting dividends or splits, the user will be notified on STDERR
           unless the quiet flag was requested during object creation.

       start_date(date_string)
       end_date(date_string)
           Set the date boundaries of all queries. The date_string is interpreted by the
           Date::Manip module. The absence of a start date means retrieve back to the beginning
           of that ticker's history. The absence of an end date means retrieve up to the latest
           date in the history.

       clear_cache()
           When results are gathered for a particular date range, whether they be via direct
           query or incidental extraction, they are cached. This cache is cleared by invoking
           this method directly, by resetting the boundary dates of the query, or by changing the
           "adjusted()" setting.

       quote_source(ticker_symbol)
       dividend_source(ticker_symbol)
       split_source(ticker_symbol)
           After query, these methods can be used to find out which particular subclass in the
           lineup fulfilled the corresponding request for a particular ticker symbol.

       The following methods are the primary methods of interest for developers wishing to make a
       site-specific subclass. The url_maker() factory is typically all that is necessary.

       url_maker()
           Returns a subroutine reference that serves as an iterrator for producing URLs based on
           target and parse mode. Repeated calls to this routine produce subsequent URLs in the
           sequence.

       extractors()
           For a particular target mode and parse mode, returns a hash containing code references
           to extraction routines for the remaining targets. For example, for target 'quote' in
           parse mode 'html' there might be extractor routines for both 'dividend' and 'split'.

       ua()
           Accessor method for the LWP::UserAgent object used to process HTTP::Request for
           individual URLs. This can be handy for such things as configuring proxy access for the
           underlying user agent. Example:

            # Manual configuration
            $qh1->ua->proxy(['http'], 'http://proxy.sn.no:8001/');

            # Load from environment variables
            $qh2->ua->env_proxy();

           See LWP::UserAgent for more information on the capabilities of that module.

       The following are potentially useful for calling within methods overridden above:

       parse_mode($parse_mode)
           Set the current parsing mode. Currently parsers are available for html and csv.

       target_mode($target_mode)
           Return the current target mode.

       dates($start_date, $end_date)
           Returns a list of business days between and including the provided boundary dates. If
           no arguments are provided, start_date and end_date default to the currently specified
           date range.

       labels(%parms)
           Used to override the default labels for a given target mode and parse mode. Takes the
           following named parameters:

           target_mode
               Can currently be 'quote', 'dividend', or 'split'. Default is 'quote'.

           parse mode
               Can currently be 'csv' or 'html'. The default is typically 'csv' but might vary
               depending on the quote source.

           labels
               The following are the default labels. Text entries convert to case- insensitive
               regular expressions):

                 target_mode
                 -------------------------------------------------------
                 quote    => ['date','open','high','low','close',qr(vol|shares)i]
                 dividend => ['date','div']
                 split    => ['date','post','pre']

DISCLAIMER

       The data returned from these modules is in no way guaranteed, nor are the developers
       responsible in any way for how this data (or lack thereof) is used. The interface is based
       on URLs and page layouts that might change at any time. Even though these modules are
       designed to be adaptive under these circumstances, they will at some point probably be
       unable to retrieve data unless fixed or provided with new parameters.  Furthermore, the
       data from these web sites is usually not even guaranteed by the web sites themselves, and
       oftentimes is acquired elsewhere. See the documentation for each site-specific module for
       more information regarding the disclaimer for that site.

       Above all, play nice.

AUTHOR

       Matthew P. Sisk, <sisk@mojotoad.com>

COPYRIGHT

       Copyright (c) 2000-2017 Matthew P. Sisk. All rights reserved. All wrongs revenged. This
       program is free software; you can redistribute it and/or modify it under the same terms as
       Perl itself.

SEE ALSO

       Finance::QuoteHist(3), HTML::TableExtract(3), Date::Manip(3), perlmodlib(1), perl(1).