NAME
    Babble - RSS Feed Aggregator and Blog engine

SYNOPSIS
     use Babble;
     use Babble::DataSource::RSS;

     my $babble = Babble->new ();

     $babble->add_params (meta_title => "Example Babble");
     $babble->add_sources (
            Babble::DataSource::RSS->new (
                    -id => "Gergely Nagy",
                    -location => 'http://bonehunter.rulez.org/~algernon/blog/index.xml',
                    -lwp => {
                            agent => "Babble/" . $Babble::VERSION . " (Example)"
                    }
            )
     );
     $babble->collect_feeds ();

     print $babble->output (-theme => "sidebar");

DESCRIPTION
    "Babble" is a system to collect, process and display RSS feeds. Designed
    in a straightforward and extensible manner, "Babble" provides near
    unlimited flexibility. Even though it provides lots of functionality,
    the basic usage is pretty simple, and only a few lines.

    However, would one want to add new feed item processor functions, that
    is. also trivial to accomplish.

METHODS
    "Babble" has a handful of methods, all of them will be enumerated here.

    *new*()
        Creates a new Babble object. Arguments to the *new* method are
        listed below, all of them are optional. All arguments passed to
        *new* will be stored without parsing, for later use by processors
        and other extensions.

        -processors
            An array of subroutines that Babble will run for each and every
            item it processes. See the PROCESSORS section for more
            information about these matters.

    *add_params*(%params)
        Add custom paramaters to the Babble object, which might be usable
        for the output generation routines.

        See the documentation of the relevant output method for details.

    *add_sources*(@sources)
        Adds multiple sources in one go.

    *collect_feeds*()
        Retrieve and process the feeds that were added to the Babble. All
        processor routines will be run by this very method.

        Please note that this must be called before the *output* method!

    sort()
        Sort all the elements in an aggregation by date, and return the
        sorted array of items. Leaves the work to
        Babble::Document::Collection->sort().

    all()
        Return all items in an aggregation as an array.

    *output*(%params)
        Generate the output. This methods recognises two arguments: "type",
        which determines what output method will be used for the actual
        output itself, and "theme", which overrides this, and uses a theme
        engine instead. (A theme engine is simply a wrapper around a
        specific output method, with some paramaters pre-filled.)

        The called module needs to be named "Babble::Output::$type" or
        "Babble::Theme::$theme", and must be a Babble::Output descendant.

    search()
        Dispatch everything to Babble::Document::Collection->search().

PROCESSORS
    Processors are subroutines that take four arguments: An *item*, a
    *channel*, a *source*, and a "Babble" object (the caller).

    An *item* is a Babble::Document object, *channel* is a
    Babble::Document::Collection object, and *source* is a
    Babble::DataSource object.

    Preprocessors operate on *item* in-place, doing whatever they want with
    it, being it adding new fields, modifying others or anything one might
    come up with.

    A default set of preprocessors, which are always run first (unless
    special hackery is in the works), are provided in the
    "Babble::Processors" module. Since they are automatically used, one does
    not need to add them explicitly.

AUTHOR
    Gergely Nagy, algernon@bonehunter.rulez.org

    Bugs should be reported at <http://bugs.bonehunter.rulez.org/babble>.

SEE ALSO
    Babble::DataSource, Babble::Document, Babble::Document::Collection,
    Babble::Output, Babble::Theme, Babble::Processors