#!/usr/bin/perl -w
use strict;
use WWW::Mechanize;
use Getopt::Long;

my $max = 10;
GetOptions(
    "max=i" => \$max,
);

my $search = shift or die "Wymagane podanie szukanego tematu";

my $w = WWW::Mechanize->new;
$w->get( "http://www.webshots.com/explore/" );
$w->success or die "Niemoliwy odczyt strony wyszukiwania!\n";

$w->submit_form(
    form_number => 1,
    fields => { words => $search },
);
$w->success or die "Szukanie nie powiodo si!\n";

# przerwanie skryptu w razie wystpienia ostrzeenia 
# o treciach tylko dla dorosych.
if ( $w->content =~ /Adult content/i ) {
    die "Podany temat prawdopodobnie daje wyniki tylko dla dorosych\n";
}

my $ndownloads = 0;
NEXT_PAGE_LOOP: while(1) {
    $w->content =~ /Page (\d+) of (\d+)/
       or warn "Nie mona okreli liczby stron\n";
    warn "Strona $1 z $2...\n";

    # Pobranie cza "Next" przed zaadowaniem obrazkw
    my $nextlink = $w->find_link( text => "Next >" );
    my $currpage = $w->uri;

    my @links = $w->find_all_links( url_regex =>
        qr[http://community.webshots.com/photo/] );

    for my $link ( @links ) {
       my $url = $link->url;
       my $text = $link->text;
       next if $text eq "[IMG]";

       $w->get( $url );
       $w->success or die "Nie mona pobra $url";

       if ($w->content=~m[(http://community\.webshots\.com/.+?\.
(jpg|gif|png))]) {
           my $imgurl = $1; my $type = $2;

           # Stworzenie tytuu obrazka webshots zalenego od nazwy
           my $filename = lc $text;        # wszystko maymi literami
           $filename =~ s/\s+/-/g;         # spacje zamieniane na kreski
           $filename =~ s/[^0-9a-z-]+//g;  # odrzucenie znakw niealfanumerycznych
           $filename =~ s/(^-|-$)//;       # odrzucenie skrajnych kresek
           $filename = "$filename.$type";

           # Pobranie obrazka, jeli jeszcze go nie mamy
           if ( -e $filename ) { warn "Ju mamy $filename\n"; }
           else {
               # Uycie LWP:content_file do zapisania obrazka bezorednio
               # w systemie plikw, bez koniecznoci rcznego przetwarzania.
               warn "Zapisywanie $filename...\n";
               $w->get( $imgurl, ":content_file"=>$filename );
               ++$ndownloads; last if $ndownloads >= $max;
           }
        } else { warn "Nie udao si znale obrazka pod $url\n"; }
    }

    last unless $nextlink && ($ndownloads<$max);

    my $nexturl = URI->new_abs( $nextlink->url, $currpage )->as_string;
    $w->get( $nexturl ); die "$nexturl nie powid si!\n" unless $w->success;
}

