#!/usr/bin/perl -wT
###########################################
# slideshow
# Mike Schilli, 2005 (m@perlmeister.com)
###########################################
use strict;

use CGI qw(:all);
use Yahoo::Search AppId => "YOUR_APP_ID";
use Cache::FileCache;
use Storable qw(freeze thaw);

my $cache = Cache::FileCache->new({
    namespace          => 'slideshow',
    default_expires_in => 3600,
    auto_purge_on_set  => 1,
});

my $data;

print header(-charset => "utf-8");

if(param('q') and defined param('s')) {
    $data = thaw $cache->get(param('q'));
    my $seq = param('s');
    $seq %= scalar @$data;
    print refresh(5);
    print center(
       a({href => url()}, "Stop"), 
       a({href => next_url()}, "Next"), 
       p(),
       b(param('q')), ":", 
       i($data->[$seq]->[1]), p(),
       img({src => $data->[$seq]->[0]}),
       p(), a({href => $data->[$seq]->[0]}, 
               $data->[$seq]->[0]),
    );
} elsif(param('q')) {
    my @results = 
        Yahoo::Search->Results(
          Image        => param('q'),
          Count        => 50,
          AllowAdult   => 0,
        );
    if(@results) {
        for(@results) {    
            push @$data, 
                 [$_->Url(), $_->Summary()];
        }
        print refresh(0);
        $cache->set(param('q'), 
                    freeze($data));
    } else {
        print refresh(0, 1);
    }
} else {
    print h2("Slideshow Search"),
          start_form(),
          textfield(-name => 'q'), 
          submit(-value => "Search"),
	  end_form(),
          font({size => 1}, 
               "Powered by Yahoo! Search");
}
    
##########################################
sub refresh {
##########################################
    my($sleep, $reset) = @_;

    return start_html(
      -title => "Slideshow",
      -head  => meta({
        -http_equiv => "Refresh", 
        -content    => "$sleep, URL=" . 
             ($reset ? url() : next_url())
    }));
}

##########################################
sub next_url {
##########################################
    my $s   = param('s');
    $s    ||= 0;

    return sprintf "%s?q=%s&s=%d", url(), 
                 param('q'), $s+1; 
}
