#!/usr/bin/perl -w
use strict;
use LWP::Simple;
use URI::Escape;

# $MAX_BBB_SEARCH_RETRIES to liczba prb odnalezienia adresu URL 
# na witrynie BBB (dowiadczenie wskazuje, e witryna BBB w okoo
# 30% wypadkw zwraca bd "database unavailable" czyli "baza danych
# niedostpna").
my $MAX_BBB_SEARCH_RETRIES = 3;

# $MAX_BBB_REFERRAL_PAGE_RETRIES to liczba prb pobrania informacji
# o firmie z adresu URL uzyskanego w wynikach wyszukiwania.
my $MAX_BBB_REFERRAL_PAGE_RETRIES = 3;

# podajemy adres URL firmy, doczamy go do adresu URL BBB.
my $business_url = shift || die "Nie przekazano adresu URL do sprawdzenia!\n";
my $search_url   = "http://search.bbb.org/results.html?tabletouse=".
                   "url_search&url=" . $business_url;
my %company; # tutaj bdziemy umieszcza dane o firmie.

# szukanie wynikw a do znalezienia danych.
for (my $i = 1; $i <= $MAX_BBB_SEARCH_RETRIES; ++$i) {
    my $data = get($search_url); # jest!

    # jakie problemy? to chwila przerwy.
    if ($data =~ /apologize.*delay/ or !defined($data)) {
       print "Nie powiodo si czenie z BBB, nastpna prba za 5 sekund.\n";
       sleep(5); next; # chyba sprbujemy jeszcze raz...
    }

    # jeli nie ma danych do pobrania, koczymy.
    die "Dla podanego adresu URL nie znaleziono adnych firm.\n"
         if $data =~ /There are no companies/i;

    # pobierz nazw firmy, jej adres i przekierowanie.
    if ($data =~ /<!-- n -->.*?href="(.*?)">(.*)<!--  -->.*?">(.*)<\/f/i) {
       $company{redir}   = "http://search.bbb.org/$1";
       $company{name}    = $2; $company{address} = $3;
       $company{address} =~ s/<br>/\n/g;
       print "\nNazwa i adres firmy:\n";
       print "$company{name}\n$company{address}\n\n";
    }

    # jeli nie ma przekierowania, nie moemy przej do lokalnej
    # witryny BBB, wic koczymy dziaanie.
    unless ($company{redir}) {
      die "Przetwarzanie zwrconych wynikw niemoliwe. Mona jest obejrze ".
          "rcznie pod adresem URL: $search_url\n"; }

    last if $data;
}

# mamy ju przekierowanie na lokaln witryn BBB, wic sprbujmy pobra
# stamtd dane i przeanalizowa je.
for (my $i = 1; $i <= $MAX_BBB_REFERRAL_PAGE_RETRIES; ++$i) {
    my $data = get($company{redir}); 

    # jakie problemy? zatem chwila przerwy.
    unless (defined $data) {
       print "Nie powiodo si czenie z BBB, nastpna prba za 5 sekund.\n";
       sleep(5); next; # wic kolejna prba?
    }
    
    $data =~ s/\n|\f|\r//g; # pobierzmy jeszcze wicej danych.
    $data =~ s/\n|\f|\r//g; # pobierzmy jeszcze wicej danych.
    if ($data=~/Date:<\/b>.*?<td.*?>(.*?)<\/td>/i){$company{start}=$1;}
    if ($data=~/Entity:<\/b>.*?<td.*?>(.*?)<\/td>/i){$company{entity}=$1;}
    if ($data=~/l ?:<\/b>.*?<td.*?>(.*?)<\/td>/i){$company{principal}=$1;}
    if ($data=~/Phone.*?:<\/b>.*?<td.*?>(.*?)<\/td>/i){$company{phone}=$1;}
    if ($data=~/Fax.*?:<\/b>.*?<td.*?>(.*?)<\/td>/){$company{fax}=$1;}
    if ($data=~/Status:<\/b>.*?<td.*?>(.*?)<\/td>/){$company{mbr}=$1;}
    if ($data=~/BBB:<\/b>.*?<td.*?>(.*?)<\/td>/){$company{joined}=$1;}
    if ($data=~/sification:<\/b>.*?<td.*?>(.*?)<\/td>/){$company{type}=$1;}
    last if $data;
}

# pokamy znalezione dane dodatkowe.
print "Ewentualne dodatkowe informacje:\n";
foreach (qw/start_date entity principal phone fax mbr joined type/) {
   next unless $company{$_}; # pomi puste.
   print " Data pocztkowa: " if $_ eq "start_date";
   print " Typ podmiotu: " if $_ eq "entity";
   print " Kierownictwo: " if $_ eq "principal";
   print " Numer telefonu: " if $_ eq "phone";
   print " Numer faksu: " if $_ eq "fax";
   print " Status czonkowski: " if $_ eq "mbr";
   print " Data przystpienia do BBB: " if $_ eq "joined";
   print " Typ dziaalnoci: " if $_ eq "type";
   print "$company{$_}\n";
} print "\n";

# no dobrze, mamy wszystkie dane, ktre moemy uzyska z BBB, wic
# teraz sprawdmy, czy jest co do pokazania na PlanetFeedback.com.
my $planetfeedback_url = "http://www.planetfeedback.com/sharedLetters".
                         "Results/1,2933,,00.html?frmCompany=".
                         uri_escape($company{name})."&frmFeedbackType".
                         "One=0&frmIndustry=0&frmFeedbackTypeTwo=0".
                         "&frmMaxValue=20&buttonClicked=submit1".
                         "&frmEventType=0";
my $data = get($planetfeedback_url) or 
  die "Bd pobierania danych z PlanetFeedback: $!"; # zadanie dla ambitnych

# czy mamy wszystko, co warto pokaza?
if ($data =~ /not posted any Shared Letters/i) {
   print "Nie znaleziono opinii o firmie '$company{name}'\n";
} else { print "Opinie dostpne pod adresem $planetfeedback_url\n"; }

