Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- $| = 1;
- use warnings;
- use strict;
- use HTML::TreeBuilder;
- use constant DOMAIN => 'https://fotoforum.gazeta.pl';
- sub findUserPages($);
- sub findUserPhotos($);
- sub findPhoto($);
- sub isThereNextPage($);
- sub getNextPage($);
- open(IN, "<$ARGV[0]") or die "Nie mogę otworzyć pliku \"$ARGV[0]\": $!\n";
- for my $line (<IN>) {
- chomp($line);
- # pomiń zakomentowane linie
- next if ($line =~ m/^#/);
- print "Przerabiam : $line\n";
- # wyodrębnij nazwę użytkownika
- $line =~ m#.*/(.+).html$#;
- my $user = $1;
- print "Użytkownik : $user\n";
- # delkaracja dodatkowych zmiennych
- my %strony;
- my $next = 1;
- # pobierz ile jest stron z miniaturkami
- do {
- print "\rSprawdzam ilość stron " . $next++;
- # Pobierz listę stron ze zdjęciami
- my $tree = HTML::TreeBuilder->new_from_url($line);
- my @data = findUserPages($tree);
- foreach my $str (@data) {
- $strony{$str} = 1;
- }
- # jeśli jest następna strona, to pobierz ją
- if (isThereNextPage($tree)) {
- $line = getNextPage($tree);
- } else {
- $next = 0;
- }
- } while ($next);
- print "\n";
- my (%urls, $nr, %szd);
- # dla każdej ze stron pobierz stronę ze zdjęciem
- for my $strona (sort keys %strony) {
- print "Strona: $strona\n";
- my $tree = HTML::TreeBuilder->new_from_url($strona);
- my @szd = findUserPhotos($tree);
- for my $str (@szd) {
- $szd{$str} = 1;
- }
- }
- print "Ilość zdjęć: " . scalar(keys %szd) . "\n";
- # dla każdej strony zdjęcia pobierz link do zdjęcia
- for my $szdj (sort keys %szd) {
- my $tree = HTML::TreeBuilder->new_from_url($szdj);
- my $link = findPhoto($tree);
- if ($link) {
- printf("%03d, %s, %s\n", ++$nr, $user, $link);
- $urls{$link} = 1;
- }
- }
- open(OUT, ">$user.txt") or die "Nie mogę utworzyć pliku \"$user.txt\": $!\n";
- printf(OUT "%s", join("\n", sort keys %urls));
- close(OUT);
- print "Lista zdjęć użytkownika $user zgrana jako $user.txt\n";
- }
- close(IN);
- ###################################################
- # znajdż link do oryginalnego zdjęcia
- sub findPhoto($) {
- my ($ref_tree) = @_;
- my $orig = $ref_tree->look_down('class','orig');
- if ($orig) {
- return DOMAIN . $orig->attr_get_i('href');
- } else {
- return undef;
- }
- }
- ###################################################
- # znajdż zdjęcia użytkownika
- sub findUserPhotos($) {
- my ($ref_tree) = @_;
- my $gallery = $ref_tree->look_down('id','gallery');
- my @photos = $gallery->look_down('class' => 'photo');
- my %data;
- for my $photo (@photos) {
- $data{DOMAIN . $photo->attr_get_i('href')} = 1;
- }
- return sort keys %data;
- }
- ###################################################
- # znajdź strony użytkownika
- sub findUserPages($) {
- my ($ref_tree) = @_;
- my @pages = $ref_tree->look_down('class' => 'pages');
- my %pages;
- for my $page (@pages) {
- my @links = $page->look_down('class' => 'link1');
- for my $link (@links) {
- $pages{DOMAIN . $link->attr_get_i('href')} = 1;
- }
- }
- return sort keys %pages;
- }
- ###################################################
- # sprawdź czy jest następna strona
- sub isThereNextPage($) {
- my ($ref_tree) = @_;
- $ref_tree->look_down('class','next') ? 1 : 0;
- }
- ###################################################
- # pobierz link do następnej strony
- sub getNextPage($) {
- my ($ref_tree) = @_;
- DOMAIN . $ref_tree->look_down('class','next')->look_down('class','link1')->attr_get_i('href');
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement