NAME

CPAN::Source - CPAN source list data aggregator.

DESCRIPTION

CPAN::Source fetch, parse, aggregate all CPAN source list for you.

Currently CPAN::Source supports 4 files from CPAN mirror. (00whois.xml, contains cpan author information, 01mailrc.txt contains author emails, 02packages.details.txt contains package information, 03modlist contains distribution status)

CPAN::Source aggregate those data, and information can be easily retrieved.

The distribution info is from CPAN::DistnameInfo.

SYNOPSIS

my $source = CPAN::Source->new(  
    cache_path => '.cache',
    cache_expiry => '7 days',
    mirror => 'http://cpan.nctu.edu.tw',
    source_mirror => 'http://cpansearch.perl.org'
);

$source->prepare;   # use LWP::UserAgent to fetch all source list files ...

# 00whois.xml
# 01mailrc
# 02packages.details.txt
# 03modlist

$source->dists;  # all dist information
$source->authors;  # all author information

for my $dist ( @{ $source->dists } ) {

}

for my $author ( @{ $source->authors ) {

}

for my $package ( @{ $source->packages } ) {

}

$source->packages;      # parsed package data from 02packages.details.txt.gz
$source->modlist;       # parsed package data from 03modlist.data.gz
$source->mailrc;        # parsed mailrc data  from 01mailrc.txt.gz


my $dist = $source->dist('Moose');
my $distname = $dist->name;
my $distvname = $dist->version_name;
my $version = $dist->version;  # attributes from CPAN::DistnameInfo
my $meta_data = $dist->fetch_meta();

$meta_data->{abstract};
$meta_data->{version};
$meta_data->{resources}->{bugtracker};
$meta_data->{resources}->{repository};

my $readme = $dist->fetch_readme;
my $changes = $dist->fetch_changes;


my $pkg = $source->package( 'Moose' );
my $pm_content = $pkg->fetch_pm();


my $mirror_server_timestamp = $source->stamp;  # DateTime object

ACCESSORS

authors

Which is a hashref, contains:

{
    {pauseId} => { ... }
}
package_data

Which is a hashref, contains:

{ 
    meta => { 
        File => ...
        URL => ...
        Description => ...
        Line-Count => ...
        Last-Updated => ...
    },
    packages => { 
        'Foo::Bar' => {
            package   => 'Foo::Bar',
            version   =>  0.01 ,
            path      =>  tar path,
            dist      =>  dist name
        }
        ....
    }
}

METHODS

new( OPTIONS )

prepare_authors

prepare_mailrc

prepare_modlist

Download 03modlist.data.gz and parse it.

prepare_package_data

Download 02packages.details.gz and parse it.

module_source_path

Return full-qualified source path. built from source mirror, the default source mirror is http://cpansearch.perl.org.

mirrors

Return mirror info from mirror site. (07mirrors.json)

fetch_whois

fetch_mailrc

fetch_package_data

fetch_modlist_data

fetch_mirrors

fetch_module_rss

Return modules rss, from {Mirror}/modules/01modules.mtime.rss

fetch_recent( $period )

Fetch recent updated modules,

my $list = $source->fetch_recent( '1d' );
my $list = $source->fetch_recent( '1M' );

dist( $name )

return CPAN::Source::Dist object.

http_get

Use LWP::UserAgent to fetch content.

new_dist

Convert CPAN::DistnameInfo into CPAN::Source::Dist.

purge_cache

Purge cache.

AUTHOR

Yo-An Lin <cornelius.howl {at} gmail.com>

SEE ALSO

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 492:

'=item' outside of any '=over'