#!/usr/bin/perl  -w
use strict; $|++;

use LWP::UserAgent;
use HTML::LinkExtor;
use URI::URL;

# gdzie maj znale si wyniki?
my $result_file  = "./result.html";
my $keywords_reg = qr/szukane sowa rozdzielone symbolem potoku/;
my $starter_url  = "tutaj Twj ulubiony dziennik";

# otwarcie i stworzenie pliku result.html.
open(RESULT, ">$result_file") or die "Niemoliwe utworzenie: $!\n";
print RESULT "<html><head><title>Pajk znalaz...</title></head><body>\n";

# nasz ko roboczy.
my $ua = LWP::UserAgent->new;
print "\nteraz analizuj: $starter_url\n";

# zaczynamy szukanie linkw. LinkExtor pobiera argument - procedur
# obsugujc znalezione linki, a dalej dane ze strony. 
HTML::LinkExtor->new(
  sub {
        my ($tag, %attr) = @_;
        return if $tag ne 'a';

        # przeksztacamy adresy wzgldne z href w bezwzgldne,
        # dodajemy je do wewntrznej listy linkw do sprawdzenia.
        my @links = map { url($_, $starter_url)->abs(  ) }
                      grep { defined } @attr{qw/href/};

        # aby adnie wyglday...
        foreach my $link (@links) {
           print " + $link\n"; # tutaj!
           my $data = $ua->get($link)->content;
           if ($data =~ m/$keywords_reg/i) {
              open(RESULT, ">>$result_file");
              print RESULT "<a href=\"$link\">$link</a><br>\n";
              close(RESULT); # pokazalimy jedno dopasowanie!
           }
        }

# teraz faktyczna tre analizowana przez 
# HTML::LinkExtor...
})->parse(
  do {
     my $r = $ua->get($starter_url);
     $r->content_type eq "text/html" ? $r->content : "";
  }
);

print RESULT "</body></html>";
close RESULT; exit;

