package WWW::Comic::Plugin::LeastICouldDo; use warnings; use strict; use Carp; use XML::Simple; use vars qw($VERSION @ISA %COMICS); our $VERSION = '0.01'; @ISA = qw(WWW::Comic::Plugin); %COMICS = (leasticoulddo => 'LeastICouldDo'); # $Id: 388 2008-06-26 14:56:37Z davidp $ =head1 NAME WWW::Comic::Plugin::LeastICouldDo - WWW::Comic plugin to fetch LeastICouldDo comic =head1 SYNOPSIS See L for full details, but here's a brief example: use WWW::Comic; my $wc = new WWW::Comic; my $latest_candh_strip_url = WWW::Comic->strip_url(comic => 'LeastICouldDo'); =head1 DESCRIPTION A plugin for L to fetch the LeastICouldDo comic from See L and L for information on the WWW::Comic interface. =head1 FUNCTIONS =over 4 =item new Constructor - see L for usage =cut sub new { my $class = shift; my $self = { homepage => '' }; bless $self, $class; return $self; } =item strip_url Returns the URL to the current strip image (or, if given the 'id' param, the URL to that particular strip) =cut sub strip_url { my $self = shift; my %param = @_; my $stripstub = ''; if ($param{id}) { # we know what the URL will be # TODO: maybe fetch it to make sure it's actually valid? return "$stripstub/$param{id}.gif"; } # the latest comic will be found at /strips/comic.gif - but that's not # much good for anything that expects each strip to have a different # URL. So, instead, we'll need to parse the RSS feed and return the # first comic from the feed (which will have the proper URL). my $feedurl = ''; my $response = $self->_new_agent->get($feedurl); if ($response->is_success) { my $rss = XML::Simple::XMLin($response->content); if (!$rss) { carp "Failed to parse RSS feed"; return; } item: for my $item (@{ $rss->{channel}->{item} }) { next item if $item->{category} ne 'Comic'; if (my($id) = $item->{guid}->{content} =~ m{comic/([0-9]+)$}) { # bingo, found the first comic listed in the feed: return "$stripstub/$id.gif"; } } # we should not get here in normal operation: carp "Failed to find comics in RSS feed"; return; } else { carp "Failed to fetch $feedurl - " . $response->status_line; return; } } =back =head1 AUTHOR David Precious, C<< >> =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc WWW::Comic::Plugin::LeastICouldDo You can also look for information at: =over 4 =item * RT: CPAN's request tracker L =item * AnnoCPAN: Annotated CPAN documentation L =item * CPAN Ratings L =item * Search CPAN L =back =head1 ACKNOWLEDGEMENTS To Nicola Worthington (NICOLAW) for writing WWW::Comic =head1 COPYRIGHT & LICENSE Copyright 2008 David Precious, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1; # End of WWW::Comic::Plugin::LeastICouldDo