#!/usr/bin/perl-w

use strict;
use Date::Manip;
use LWP::Simple;
use Getopt::Long;

$ENV{TZ} = "GMT" if $^O eq "MSWin32";

# strona "What's New" z Yahoo!
my $new_url = "http://dir.yahoo.com/new/";

# podstawowe kategorie Yahoo!. tablica asocjacyjna, gdy
# bdziemy w niej zapisywa liczniki.
my @categories = ("Arts & Humanities",    "Business & Economy",
                  "Computers & Internet", "Education",
                  "Entertainment",        "Government",
                  "Health",               "News & Media",
                  "Recreation & Sports",  "Reference",
                  "Regional",             "Science", 
                  "Social Science",       "Society & Culture");
my %final_counts; # gdzie zapisywa ostateczne wyniki.

# zaadowanie opcji z wiersza polece.
my %opts; GetOptions(\%opts, "c|count=i");
die unless $opts{c}; # liczba witryn z ostatnich past $i dni.

# jeli mamy zliczy nowe witryny, przejdziemy przez gwne
# kategorie po ostatnich $i dniach, zliczymy wyniki.

# pocztek nagwka do pliku importowego.
my $header = "Category";

# pobieramy $i dni cofajc si od dzisiaj.
for (my $i=1; $i <= $opts{c}; $i++) {

   # stworzenie czasu Data::Manip, ktry zostanie
   # uyty do zbudowania ostatnich $i dni.
   my $day; # zapytanie do pobierania danych z Yahoo!
   if ($i == 1) { $day = "yesterday"; }
   else { $day = "$i days ago"; }
   my $date = UnixDate($day, "%Y%m%d");

   # dodanie tej daty do pliku importowego.
   $header .= "\t$date";

   # i pobranie dnia.
   my $url = "$new_url$date.html";
   my $data = get($url) or die $!;

   # teraz ptla po kadej z naszych kategorii.
   my $day_count; foreach my $category (sort @categories) {
       $data =~ /$category.*?(\d+)/; my $count = $1 || 0;
       $final_counts{$category} .= "\t$count"; # tworzenie acucha.
   }
}

# kiedy mamy wszystkie liczniki, drukujemy ostateczny plik.
print $header . "\n";
foreach my $category (@categories) {
   print $category, $final_counts{$category}, "\n";
}

