"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: TeollisoikeusrikosPosted by Jouni Heikniemi at 09.04.04 10:50