#!/usr/bin/perl -w
use strict;

use LWP::Simple;
use HTML::TokeParser;
use URI::Escape;

# Szukany artysta powinien zosta podany w parametrze.
my $artist = $ARGV[0]; die "Nie podano artysty" unless $artist ne '';

# Za pomoc URI::Escape zamieniamy nazwisko artysty na tak posta,
# ktra bdzie moga by uyta w adresie URL.
my $search = uri_escape($artist);

# 1.  Pobieranie uywanej dalej strony.
#####################################

my $content =
  get('http://www.echocloud.net/index.php?searchword='. 
  "$search".'&option=asearch&stype=2&order=0&nrows=6');

# Teraz mamy nasze dane, inicjalizujemy nimi 
# nowy obiekt HTML::TokeParser.
my $stream = new HTML::TokeParser(\$content);

print "Inni artyci lubiani przez suchaczy $artist to:\n";

# 2.  Okrelenie struktury dokumentu HTML.
# Wynikowy kod HTML ma posta: <a href='index.php?searchword
# =Beck&option=asearch' class="cf">&nbsp;Beck</a>
#####################################

# 3.  Modelowanie struktury w kodzie.
# Skoro kady znacznik <a class="cf"> zawiera potrzebny nam wynik ,to:
#   - Szukamy kolejnych znacznikw <a>.
#   - Jeli znacznik taki ma atrybut 'class' oraz wartoci
#     tego atrybutu jest "cf":
#       - Zapisujemy tekst od from <a> do </a>.
#   - Powtarzamy cykl.
#
# Poniej uyto dwch metod TokeParser:
# get_tag:  Przesuwa strumie do nastpnego wystpienia znacznika.
# get_trimmed_text:  Zapisuje tekst z aktualnego pooenia w strumieniu
# do danego znacznika.
#####################################

# Dla kadego znacznika <a> 
while (my $tag = $stream->get_tag("a")) {

  # Czy jest atrybut 'class'?  O wartoci 'cf'?
  if ($tag->[1]{class} and $tag->[1]{class} eq "cf") {

      # Zapisz wszystko od <a> do </a>.
      my $result = $stream->get_trimmed_text("/a");

      # Usuwanie wiodcych znakw '&nbsp;'.
      $result =~ s/^.//g;

      # Czasami Echocloud zwraca szukanego artyst jako 
      # jeden z wynikw. Jeli dany acuch pasuje do jednego
      # z wynikw, pomijamy aktualn iteracj ptli.
      next if $result =~ /$artist/i;

      # I moemy pokaza ostateczny wynik.
      print "  - $result\n";
  }
}

