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