"Miltä sivuilta on linkki tälle yhdelle käytössäni olevalle sivulle?" on mielenkiintoinen kysymys. Siihen vastaavat monet webbilokianalysaattorit, mutta tarvitsin itse hyvin yksinkertaisen työkalun, siispä tein sen Perlillä. Käyttäminen vaatii Perl-tulkkia, vähän ohjelmakoodin ymmärrystä ja mahdollisuuden- saada omaan sivustoon liittyvä http-palvelimen lokitiedosto käyttöönsä.
Koodi on kaikessa kauneudessaan tässä:
#!/usr/bin/perl -w
# Skriptin perustietorakenne: hash, jossa avaimina
# sivujen urlit. Arvoina on viittaus hashiin, jossa
# puolestaan avaimena refererit ja arvoina kunkin
# refererin esiintymislukumäärä
my %urlit;
while (<STDIN>) {
my @f = split;
# Url esiintyy lokissa 7. sarakkeessa -- muuta tarvittaessa
my $url = $f[6];
# Referer-osoite on 11. sarakkeessa (lainausmerkkeihin suljettuna)
my $ref = $f[10]; $ref =~ s/\"//g;
next if ($ref eq '-');
# Jos haluat nähdä myös oman saittisi sisäiset viittaukset,
# kommentoi seuraava rivi:
next if ($ref =~ /^http:\/\/(www\.)?heikniemi\.net\//i);
# Onko Google-haun tulos?
if ($ref =~ /http:\/\/www\.google.*q=([^&]+)/) {
my $hakusana = $1;
$hakusana =~ tr/[+]/[ ]/;
$ref = "Google-haku: $hakusana";
}
# Onko Google-kuvahaun tulos?
elsif ($ref =~ /http:\/\/images\.google.*imgurl=([^&]+)/) {
$ref = "Google-kuvaosuma: $1";
}
# Jos tätä urlia ei vielä ollut esiintynyt, luodaan
# sille tyhjä ali-hash
if (!defined $urlit{$url}) {
$urlit{$url} = {};
}
if (!defined $urlit{$url}->{$ref}) {
$urlit{$url}->{$ref} = 1;
}
else {
$urlit{$url}->{$ref}++;
}
}
# Tulostetaan tulokset urleittain aakkosissa, ja
# niiden sisällä refererit esiintymiskertojen mukaan
foreach $url (sort keys %urlit) {
print "$url\n" . "-" x length($url) . "\n";
my %refs = %{$urlit{$url}};
foreach $ref (sort {$refs{$b} <=> $refs{$a}} keys %refs) {
printf("%5d %s\n", $refs{$ref}, $ref);
}
print "\n";
}
Ja syntaksiksi käy esimerkiksi: type munloki.txt | perl tilasto.pl
Tuloksena tulee tämännäköisiä tulosteita:
/rikoslaki/rl49.html
--------------------
2 http://www.cs.tut.fi/~jkorpela/tekoik/tekl.html
1 Google-haku: rikoslaki 49
1 Google-haku: Teollisoikeusrikos
Posted by Jouni Heikniemi at 09.04.04 10:50