1 #!/usr/bin/perl -w
    2 
    3 use strict;
    4 use utf8;
    5 use Data::Dumper;
    6 use LWP::UserAgent;
    7 use HTML::TreeBuilder;
    8 use Text::Iconv;
    9 
   10 my $indexURL = 'http://www.skins.be/index.php';
   11 my $baseURL = 'http://www.skins.be';
   12 my $wallURL = 'http://wallpapers.skins.be';
   13 
   14 my $outDir = '/home/casta/bonnasses';
   15 my $targetRes = '1680x1050';
   16 
   17 my $ua = LWP::UserAgent->new ();
   18 $ua->agent ("getBonnasses/0.1");
   19 my $index = {url => $indexURL};
   20 # Initial feed content and requests
   21 $index->{request} = HTTP::Request->new (GET => $index->{url});
   22 $index->{request}->header (Accept => "text/html, */*;q=0.1");
   23 mkdir $outDir;
   24 die "cannot mkdir target" if not -d $outDir;
   25 
   26 my $res = $ua->request ($index->{request});
   27 if ($res->is_success ())
   28 {
   29     #print $res->content;
   30     # Convert to avoid ugly perl warning
   31     my $converter = Text::Iconv->new ('utf8', 'iso8859-1');
   32     my $page = $converter->convert ($res->content);
   33     my $tree = HTML::TreeBuilder->new_from_content ($page);
   34     #$tree->dump;
   35     my @array = $tree->content_list;
   36     for my $i (1, 0, 2, 0)
   37     {
   38         @array = $array[$i]->content_list;
   39     }
   40     my @celebs = $array[5]->content_list;
   41     my @models = $array[7]->content_list;
   42     for my $node (@celebs, @models)
   43     {
   44         #$node->dump;
   45         my $url = $node->attr ('href');
   46         next if not defined $url or $url eq '';
   47         chomp $url;
   48         if ($url ne '')
   49         {
   50             #print $url, "\n";
   51             my ($category, $name) = ($url =~ m/\/([^\/]+)\/([^\/]+)\//);
   52             # fetch subpages
   53             # loop all pages !
   54             my $count = 0;
   55             print "=== Start $name ===\n";
   56             while (1)
   57             {
   58                 my $bonnasse = {url => $baseURL . $url . 'page' . $count};
   59                 #print $bonnasse->{url}, "\n";
   60                 $bonnasse->{request} = HTTP::Request->new (GET => $bonnasse->{url});
   61                 $bonnasse->{request}->header (Accept => "text/html, */*;q=0.1");
   62 
   63                 my $resBonnasse = $ua->request ($bonnasse->{request});
   64                 if ($resBonnasse->is_success ())
   65                 {
   66                     my @IDs = ($resBonnasse->content =~ m/\/(\d+)\/$targetRes/gs);
   67                     #print Dumper \@IDs;
   68                     for my $id (@IDs)
   69                     {
   70                         system "wget -nv -c '$wallURL/$name/$name-$targetRes-$id.jpg' -O $outDir/$name-$id.jpg";
   71                     }
   72                     $count++;
   73                     if ($resBonnasse->content =~ m/\/$category\/$name\/page$count\//s)
   74                     {
   75                         print "--- Next page for $name ---\n";
   76                     }
   77                     else
   78                     {
   79                         print "=== End of $name ===\n";
   80                         last;
   81                     }
   82                 }
   83                 else
   84                 {
   85                     print "=== Error fetching $bonnasse->{url} ===\n";
   86                     last;
   87                 }
   88             }
   89         }
   90     }
   91 }
   92