#!/usr/bin/perl -w
use strict;
use LWP::Simple;
use HTML::TableExtract;
use Net::SMTP;
use Net::AIM;
use XML::RSS;

# pobieramy na pniej parametry.
my $RUN_STATE = shift(@ARGV);

# bazowy adres URL witryny, z ktrej pobieramy dane oraz 
# adres URL strony z list bugtraq.
my $base_url = "http://www.security-focus.com";
my $url      = "http://www.security-focus.com/archive/1";

# pobieramy dane.
my $html_file = get($url) or die "$!\n";

# tworzymy dat ISO.
my ($day, $month, $year) = (localtime)[3..5];
$year += 1900; my $date = "$year-$month-$day";

# interesujce nas dane s w tabeli, tabela ma nagwki,
# wic moemy poda nagwki i uy TableExtract do pobrania
# danych znajdujcych si pod nagwkami. Nie chcemy zmienia kodu
# HTML, abymy w pokazywanych wynikach mogli uywa hiperczy:
my $table_extract =
   HTML::TableExtract->new(
     headers   => [qw(Date Subject Author)],
     keep_html => 1 );
$table_extract->parse($html_file);

# analizujemy dane informacje i stawiamy je do struktury.
my @parsed_rows; my $ctr = 0;
foreach my $table ($table_extract->table_states) {
   foreach my $cols ($table->rows) {
      @$cols[0] =~ m|(\d+/\d+/\d+)|;
      my %parsed_cols = ( "date" => $1 );

      # potrzebne linki s w drugiej kolumnie, analizujemy niepodany
      # kod HTML i przechwytujemy znaczniki <A>. Linki s wzgldne,
      # wic rozwijamy je. Wikszo funkcji moglibymy zrobi 
      # przy pomocy URI::URL, HTML::Element, HTML::Parse itd.
      @$cols[1] =~ s/ class="[\w\s]*"//;
      @$cols[1] =~ m|(<a href="(.*)">(.*)</a>)|;
      $parsed_cols{"subject_html"} = "<a href=\"$base_url$2\">$3</a>";
      $parsed_cols{"subject_url"}  = "$base_url$2";
      $parsed_cols{"subject"}      = $3;

      # autor jest linkowany w 3. kolumnie, wic kopiujemy to powizanie.
      @$cols[2] =~ s/ class="[\w\s]*"//;
      @$cols[2] =~ m|(<a href="mailto:(.*@.*)">(.*)</a>)|;
      $parsed_cols{"author_html"}  = $1;
      $parsed_cols{"author_email"} = $2;
      $parsed_cols{"author"}       = $3;

      # wszystkie informacje wstawiamy do tablicy tablic asocjacyjnych,
      # aby uatwi sobie siganie do nich.
      $parsed_rows[$ctr++] = \%parsed_cols;
   }
}
 
# jeli nie przekazano adnych parametrw, po prostu generujemy dane 
# do standardowego wyjcia.
unless ($RUN_STATE) { print &format_my_data(  ); }

# formatujemy wsplne dane.
sub format_my_data(  ) {
   my $data = "";

   foreach my $cols (@parsed_rows)  {
      unless ($RUN_STATE) { $data .= "$cols->{'date'} $cols->{'subject'}\n"; }
   }

   return $data;
}

