#!/usr/bin/perl -w
#
# AudioScrobble - znajduje artystw podobnych do wskazanych.
# Komentarze, sugestie, zastrzeenia? e-mail: adam@bregenzer.net.
#
# Kod ten jest darmowym oprogramowaniem. Mona go rozpowszechnia i/lub
# modyfikowa na takich warunkach, jak samego Perla.
#

use strict; $|++;
my $VERSION = "1.0";

# sprawdzamy, czy mamy potrzebne moduy; jeli nie, koniec.
eval("use LWP 5.6.9;"); die "[err] Wymaga LWP w wersji 5.6.9 lub wyszej.\n" if $@;

# bazowy adres URL do wszystkich da
my $base_url = "http://www.audioscrobbler.com/modules.php?".
               "op=modload&name=top10&file=scrobblersets";

my $counter = 0;         # liczba pokazywanych artystw
my $max_count = 10;      # maksymalna liczba pokazywanych artystw
my ($a1, $a2, $a3) = ''; # zmienne wejciowe

# Uwaga: w kodzie tym sprawdzamy argumenty, wobec tego jeli
# nazwa grupy zawiera wiele sw, trzeba poda j w cudzysowach.
# Poza tym w Audioscrobbler poda mona co najwyej trzy nazwy
# grup, wic sprawdzamy jedynie trzy pierwsze argumenty.
$a1 = $ARGV[0] || die "Nie przekazano artystw!\n";
$a2 = $ARGV[1] || ""; $a3 = $ARGV[2] || "";

# przygotowujemy si do pobierania danych; uywamy faszywej tosamoci
# obiektu User-Agent, aby pomin filtry.
print "Pobieranie danych pasujcych do podanych... ";
my $ua = LWP::UserAgent->new(agent => 'Mozilla/4.76 [en] (Win98; U)');
my $data = $ua->get("$base_url&a1=$a1&a2=$a2&a3=$a3")->content;
print "gotowe.\n";

# pokamy adny nagwek.
print "Powizanie\tArtysta\n";
print "-" x 76, "\n";

# Okrelanie szerokoci obrazka dla artysty wskazanego w URL, 
# aby okreli stopie powizania.
while ($counter < $max_count && $data =~ /href="modules\.php\
?op=modload&name=top10&file=artistinfo&artist=[^"]+">([^<]+)<\/a>[^<]+<\
/td><td[^>]+><img[^>]+\/><img[^>]+width="([0-9]+)">(.*)/) {

    # prezentacja wspczynnika powizania oraz nazwiska artysty.
    printf "%1.2f", ($2 / 300); print "\t\t" . $1 . "\n";

    # dalej przetwarzamy pozostae dane.
    $data = $3; $counter++;
}

if ($counter == 0) {print "Nie znaleziono.\n";}
print "-" x 76, "\n";

