#!/usr/bin/perl -w
# goocount.pl
# Wykonuje zadanie zapytanie codziennie midzy podanymi dat pocztkow
# i dat kocow; formie pliku CSV zwraca kolejne daty i odpowiadajce
# im iloci wynikw. Pochodzi z ksiki Google Hacks, od Tary Calishain
# i Raela Dornfesta.
#
# uycie: goocount.pl query="{zapytanie}" start={data} end={data}
# przy czym daty podaje si w formacie rrrr-mm-dd, np. 2002-12-31
#
use strict;
use SOAP::Lite;
use Time::JulianDay;
use CGI qw/:standard/;

# Twj klucz API Google.
my $google_key = 'tutaj wstaw klucz';

# Pooenie pliku WSDL GoogleSearch.
my $google_wdsl = "./GoogleSearch.wsdl";

# Sprawdzanie poprawnoci dat.
my $date_regex = '(\d{4})-(\d{1,2})-(\d{1,2})';

# Sprawdzamy, czy wszystkie przekazane parametry s poprawne.
( param('query')
  and param('start') =~ /^(?:$date_regex)?$/
  and param('end') =~ /^(?:$date_regex)?$/ 
) or die qq{uycie: goocount.pl query="{zapytanie}" start={data} end={data}\n};

# Przeksztacanie dat wedug kalendarza juliaskiego.
my $query = param('query');
my $yesterday_julian = int local_julian_day(time) - 1;
my $start_julian = (param('start') =~ /$date_regex/)
   ? julian_day($1,$2,$3) : $yesterday_julian;
my $end_julian   = (param('end') =~ /$date_regex/)
   ? julian_day($1,$2,$3) : $yesterday_julian;

# Tworzenie nowego dania SOAP do Google.
my $google_search  = SOAP::Lite->service("file:$google_wdsl");

# Zaczynamy nasz plik CSV.
print qq{"date","count"\n};

# Iteracja naszego zapytania w kolejnych datach juliaskich.
foreach my $julian ($start_julian..$end_julian) {
    $full_query = "$query daterange:$julian-$julian";
    my $results = $google_search->doGoogleSearch( 
                      $google_key, $full_query, 0, 10, "false",
                      "",  "false", "", "latin1", "latin1"
                  );

    # Pokazujemy kolejny rekord CSV.
    print '"', sprintf("%04d-%02d-%02d", inverse_julian_day($julian)),
               qq{","$result->{estimatedTotalResultsCount}"\n};
}

