Acme-AsciiArtFarts
view release on metacpan or search on metacpan
lib/Acme/AsciiArtFarts.pm view on Meta::CPAN
print $current;
=head1 METHODS
=head2 new
Constructor - creates a new Acme:AsciiArtFarts object. This method takes no arguments.
=cut
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
$self->{ua} = LWP::UserAgent->new();
$self->{uri} = 'http://www.asciiartfarts.com';
$self->{req} = HTTP::Request->new(GET => $self->{uri});
$self->__get_keywords;
$self->{cur_key}= '';
$self->{cur_num}= 0;
$self->{key_arr}= ();
lib/Acme/AsciiArtFarts.pm view on Meta::CPAN
}
=head2 current
print $aaf->current();
Returns the current strip.
=cut
sub current {
return $_[0]->__request('/today.txt')
}
=head2 random
print $aaf->random();
Returns a random strip.
=cut
sub random {
return __parse($_[0]->__request('/random.cgi'));
}
=head2 list_keywords
print join " ", $aaf->list_keywords();
Returns a list of all keywords by which strips are sorted.
=cut
sub list_keywords {
return sort keys %{$_[0]->{keywords}}
}
=head2 list_by_keyword
my @art = $aaf->list_by_keyword('matrix');
Returns a list of strip numbers for the given keyword.
=cut
sub list_by_keyword {
my ($self,$keyword)= @_;
exists $self->{keywords}->{$keyword} or return 0;
return @{$self->{keywords}{$keyword}{strips}};
}
=head2 get_by_num
print $aaf->get_by_num($art[0]);
print $aaf->get_by_num(int rand 1000);
Given a strip number as returned by other methods, return the requested strip.
Alternately, given an integer value that is a valid strip number, return the requested strip.
=cut
sub get_by_num {
my ($self,$num) =@_;
$num =~ /^#/ or $num = '#'.$num;
return __parse($self->__request("/$self->{strips}{$num}{page}"))
}
sub __get_keywords {
my $self= shift;
my $itr = 0;
my @html= split /\n/, $self->__request('/keyword.html');
for ($itr=0;$itr<@html;$itr++) {
$_ = $html[$itr];
next unless /^<li><a name="keyword/;
my($key,$page,$count) = /^<li.*?:(.*?)".*ref="(.*)".*a> \((.*)\)/;
$self->{keywords}{$key}{count} = $count;
$self->{keywords}{$key}{page} = $page;
lib/Acme/AsciiArtFarts.pm view on Meta::CPAN
my($num,$page,$name,$date) = /^<li>(.*?):.*ref="(.*?)">(.*?)<.*l>(.*)</;
push @{$self->{keywords}{$key}{strips}}, $num;
$self->{strips}{$num}{name} = $name;
$self->{strips}{$num}{page} = $page;
$self->{strips}{$num}{date} = $date;
$self->{strips}{$num}{keyword} = $key;
}
}
}
sub __request {
my($self,$rl) = @_;
$rl |= '';
my $res = $self->{ua}->get($self->{uri}.$rl);
$res->is_success and return $res->content;
$self->{error} = 'Unable to retrieve content: ' . $res->status_line;
return 0
}
sub __parse {
my @html = split /\n/, $_[0];
my $found = 0;
my $res;
foreach (@html) {
next unless /^<table cell.*pre>/ or $found;
$found = 1;
next if /^<table cell/;
return $res if /^<\/pre>/ and $found;
s/</</g;
( run in 0.224 second using v1.01-cache-2.11-cpan-a5abf4f5562 )