Advertisement
ZaxonXP45

fforum.pl - Skrypt do pobrania zdjęć z fotoforum.gazeta.pl

Apr 15th, 2022 (edited)
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 3.78 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. $| = 1;
  4.  
  5. use warnings;
  6. use strict;
  7.  
  8. use HTML::TreeBuilder;
  9. use constant DOMAIN => 'https://fotoforum.gazeta.pl';
  10.  
  11. sub findUserPages($);
  12. sub findUserPhotos($);
  13. sub findPhoto($);
  14. sub isThereNextPage($);
  15. sub getNextPage($);
  16.  
  17. open(IN, "<$ARGV[0]") or die "Nie mogę otworzyć pliku \"$ARGV[0]\": $!\n";
  18.  
  19. for my $line (<IN>) {
  20.     chomp($line);
  21.  
  22.     # pomiń zakomentowane linie
  23.     next if ($line =~ m/^#/);
  24.  
  25.     print "Przerabiam : $line\n";
  26.  
  27.     # wyodrębnij nazwę użytkownika
  28.     $line =~ m#.*/(.+).html$#;
  29.     my $user = $1;
  30.  
  31.     print "Użytkownik : $user\n";
  32.  
  33.     # delkaracja dodatkowych zmiennych
  34.     my %strony;
  35.     my $next = 1;
  36.  
  37.     # pobierz ile jest stron z miniaturkami
  38.     do {
  39.         print "\rSprawdzam ilość stron " . $next++;
  40.         # Pobierz listę stron ze zdjęciami
  41.         my $tree = HTML::TreeBuilder->new_from_url($line);
  42.         my @data = findUserPages($tree);
  43.  
  44.         foreach my $str (@data) {
  45.             $strony{$str} = 1;
  46.         }
  47.  
  48.         # jeśli jest następna strona, to pobierz ją
  49.         if (isThereNextPage($tree)) {
  50.  
  51.             $line = getNextPage($tree);
  52.         } else {
  53.             $next = 0;
  54.         }
  55.  
  56.     } while ($next);
  57.  
  58.     print "\n";
  59.  
  60.     my (%urls, $nr, %szd);
  61.  
  62.     # dla każdej ze stron pobierz stronę ze zdjęciem
  63.     for my $strona (sort keys %strony) {
  64.         print "Strona: $strona\n";
  65.  
  66.         my $tree = HTML::TreeBuilder->new_from_url($strona);
  67.         my @szd  = findUserPhotos($tree);
  68.  
  69.         for my $str (@szd) {
  70.             $szd{$str} = 1;
  71.         }
  72.     }
  73.  
  74.     print "Ilość zdjęć: " . scalar(keys %szd) . "\n";
  75.  
  76.     # dla każdej strony zdjęcia pobierz link do zdjęcia
  77.     for my $szdj (sort keys %szd) {
  78.  
  79.         my $tree = HTML::TreeBuilder->new_from_url($szdj);
  80.         my $link = findPhoto($tree);
  81.  
  82.         if ($link) {
  83.             printf("%03d, %s, %s\n", ++$nr, $user, $link);
  84.             $urls{$link} = 1;
  85.         }
  86.     }
  87.    
  88.     open(OUT, ">$user.txt") or die "Nie mogę utworzyć pliku \"$user.txt\": $!\n";
  89.     printf(OUT "%s", join("\n", sort keys %urls));
  90.     close(OUT);
  91.     print "Lista zdjęć użytkownika $user zgrana jako $user.txt\n";
  92. }
  93. close(IN);
  94.  
  95. ###################################################
  96. # znajdż link do oryginalnego zdjęcia
  97. sub findPhoto($) {
  98.     my ($ref_tree) = @_;
  99.     my $orig = $ref_tree->look_down('class','orig');
  100.     if ($orig) {
  101.         return DOMAIN . $orig->attr_get_i('href');
  102.     } else {
  103.         return undef;
  104.     }
  105. }
  106. ###################################################
  107. # znajdż zdjęcia użytkownika
  108. sub findUserPhotos($) {
  109.     my ($ref_tree) = @_;
  110.     my $gallery = $ref_tree->look_down('id','gallery');
  111.     my @photos = $gallery->look_down('class' => 'photo');
  112.  
  113.     my %data;
  114.     for my $photo (@photos) {
  115.         $data{DOMAIN . $photo->attr_get_i('href')} = 1;
  116.     }
  117.     return sort keys %data;
  118. }
  119.  
  120. ###################################################
  121. # znajdź strony użytkownika
  122. sub findUserPages($) {
  123.     my ($ref_tree) = @_;
  124.  
  125.     my @pages = $ref_tree->look_down('class' => 'pages');
  126.  
  127.     my %pages;
  128.  
  129.     for my $page (@pages) {
  130.  
  131.         my @links = $page->look_down('class' => 'link1');
  132.  
  133.         for my $link (@links) {
  134.             $pages{DOMAIN . $link->attr_get_i('href')} = 1;
  135.         }
  136.     }
  137.     return sort keys %pages;
  138. }
  139.  
  140. ###################################################
  141. # sprawdź czy jest następna strona
  142. sub isThereNextPage($) {
  143.     my ($ref_tree) = @_;
  144.  
  145.     $ref_tree->look_down('class','next') ? 1 : 0;
  146. }
  147.  
  148. ###################################################
  149. # pobierz link do następnej strony
  150. sub getNextPage($) {
  151.     my ($ref_tree) = @_;
  152.     DOMAIN . $ref_tree->look_down('class','next')->look_down('class','link1')->attr_get_i('href');
  153. }
  154.  
Tags: fotoforum
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement