# NAME CPAN::Source - CPAN source list data aggregator. # DESCRIPTION [CPAN::Source](http://search.cpan.org/perldoc?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](http://search.cpan.org/perldoc?CPAN::Source) aggregate those data, and information can be easily retrieved. The distribution info is from [CPAN::DistnameInfo](http://search.cpan.org/perldoc?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](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](http://search.cpan.org/perldoc?CPAN::Source::Dist) object. ## http\_get Use [LWP::UserAgent](http://search.cpan.org/perldoc?LWP::UserAgent) to fetch content. ## new\_dist Convert [CPAN::DistnameInfo](http://search.cpan.org/perldoc?CPAN::DistnameInfo) into [CPAN::Source::Dist](http://search.cpan.org/perldoc?CPAN::Source::Dist). ## purge\_cache Purge cache. # AUTHOR Yo-An Lin # SEE ALSO # LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.