package WWW::Metalgate::Year; use warnings; use strict; use Moose; use MooseX::Types::URI qw(Uri FileUri DataUri); use Encode; use IO::All; use Text::Trim; =head1 NAME WWW::Metalgate::Year =head1 VERSION Version 0.01 =cut our $VERSION = '0.01'; =head1 SYNOPSIS use WWW::Metalgate::Year; use XXX; my $year = WWW::Metalgate::Year->new( year => 2003 ); my @albums = $year->best_albums; YYY @albums; #--- #album: EPICA #artist: KAMELOT #no: 1 #year: 2003 #--- #album: DELIRIUM VEIL #artist: TWILIGHTNING #no: 2 #year: 2003 #--- #... snip ... =head1 FUNCTIONS =head2 uri =head2 year =cut has 'uri' => (is => 'rw', isa => Uri, coerce => 1); has 'year' => (is => 'ro', isa => 'Int', required => 1); =head2 BUILD =cut sub BUILD { my $self = shift; # http://www.metalgate.jp/best1992.htm $self->uri( sprintf("http://www.metalgate.jp/best%s.htm", $self->year) ); } =head2 best_albums =cut sub best_albums { my $self = shift; my @albums; my $html = do { my $all = io($self->uri)->all; $all = decode("cp932", $all); $all =~ s/\015\012\s*//g; $all =~ m/(?:The Best 10 Albums of \d{4}|The Best Albums of The 1993)/g; $all =~ m/\G.*?