#!/usr/bin/perl
###############################################################################
# #
# Script: searchwords.pl - Version 0.1.20020813 #
# #
# Dieses Script durchsucht Apache-Access-Log-Dateien nach Referern, die von #
# Suchmaschinen erzeugt wurden und gibt den Namen der Suchmaschine, Such- #
# wort und Zielseite aus. #
# #
# (c)Arne P. 2002 - http://scripte.arnep.de - arne(at)arnep.de #
# #
###############################################################################
# #
# hier die Dateinamen eintragen #
$filename = "access.log";
$outfile = "searchwords.html";
# #
###############################################################################
## Ausgabedatei leeren
open(OUT,">",$outfile) or die "Kann Datei $! nicht öffnen zum Schreiben";
## Log-Datei öffnen
open(IO,$filename) or die "Kann Datei $! nicht öffnen zum Lesen";
print OUT "
\n| Nr. | Suchmaschine | Keyword | Zielseite | Log-Eintrag |
\n";
close OUT;
## Zähler auf 0 setzen
$zeilen = 0;
## Gesamtzeilen zählen
print "Zaehle Zeilen...\r";
while () { $zeilen++; }
print "$zeilen Zeilen\r";
## Log-Datei schließen
close IO;
## Log-Datei öffnen
open(IO,$filename) or die "Kann Datei $! nicht öffnen zum Lesen";
## Log-Datei einlesen
while ()
{
$log = "";
## Google
if ( $_ =~ m/([^\"]* "GET ([^ ]*) [^"]*" .*google\..*(\?|&)q=([^&" ]*).*)/ )
{
$log = $1;
$engine = "Google";
$page = $2;
$words = $4;
$google++;
}
## Altavista
elsif ( $_ =~ m/([^\"]* "GET ([^ ]*) [^"]*" .*altavista\..*(\?|&)q=([^&" ]*).*)/ )
{
$log = $1;
$engine = "Altavista";
$page = $2;
$words = $4;
$altavista++;
}
## T-Online
elsif ( $_ =~ m/([^\"]* "GET ([^ ]*) [^"]*" .*brisbane.t-online\..*(\?|&)q=([^&" ]*).*)/ )
{
$log = $1;
$engine = "T-Online";
$page = $2;
$words = $4;
$tonline++;
}
## AOL
elsif ( $_ =~ m/([^\"]* "GET ([^ ]*) [^"]*" .*suche.aolsvc\..*(\?|&)q=([^&" ]*).*)/ )
{
$log = $1;
$engine = "AOL";
$page = $2;
$words = $4;
$aol++;
}
## Lycos
elsif ( $_ =~ m/([^\"]* "GET ([^ ]*) [^"]*" .*search.lycos\..*(\?|&)query=([^&" ]*).*)/ )
{
$log = $1;
$engine = "Lycos";
$page = $2;
$words = $4;
$lycos++;
}
## MSN
elsif ( $_ =~ m/([^\"]* "GET ([^ ]*) [^"]*" .*search.msn\..*(\?|&)q=([^&" ]*).*)/ )
{
$log = $1;
$engine = "MSN";
$page = $2;
$words = $4;
$msn++;
}
## Compuserve
elsif ( $_ =~ m/([^\"]* "GET ([^ ]*) [^"]*" .*compuserve.de\/suche.*(\?|&)q=([^&" ]*).*)/ )
{
$log = $1;
$engine = "Compuserve";
$page = $2;
$words = $4;
$compuserve++;
}
## Fireball
elsif ( $_ =~ m/([^\"]* "GET ([^ ]*) [^"]*" .*suche.fireball.*(\?|&)q=([^&" ]*).*)/ )
{
$log = $1;
$engine = "Fireball";
$page = $2;
$words = $4;
$fireball++;
}
if ( $log ne "" )
{
## Zählen
$i++;
## % umwandeln
$words =~ s/\+/ /g;
$words =~ s/%E4/ä/ig;
$words =~ s/%F6/ö/ig;
$words =~ s/%FC/ü/ig;
$words =~ s///ig;
$words =~ s///ig;
$words =~ s/%DC/Ü/ig;
$words =~ s/%C3%A4/ä/ig;
$words =~ s/%C3%B6/ö/ig;
$words =~ s/%C3%BC/ü/ig;
$words =~ s/%C3%84/Ä/ig;
$words =~ s/%252B/+/ig;
$words =~ s/%2522/"/ig;
$words =~ s/%2522/"/ig;
$words =~ s/%20/ /ig;
$words =~ s/%22/"/ig;
$words =~ s/%26/&/ig;
$words =~ s/%2B/+/ig;
$words =~ s/%2C/,/ig;
$words =~ s/%2D/-/ig;
$words =~ s/%2E/./ig;
$words =~ s/%2F/\//ig;
$words =~ s/%3A/:/ig;
$words =~ s/%3C/>",$outfile) or die "Kann Datei $! nicht öffnen zum Schreiben";
if ( $color eq "" ) { $color = "bgcolor=\"silver\""; } else { $color = ""; }
print OUT "| $i | $engine | $words | $page | $log |
\n";
close OUT;
}
}
open(OUT,">>",$outfile) or die "Kann Datei $! nicht öffnen zum Schreiben";
print OUT "
";
print OUT "Statistik:
";
print OUT "\n";
print OUT "Gesamtzeilenanzahl: $zeilen
\n";
print OUT "Anzahl Stichwörter: $i
\n";
print OUT " Google: $google
\n";
print OUT " Altavista: $altavista
\n";
print OUT " T-Online: $tonline
\n";
print OUT " AOL: $aol
\n";
print OUT " Lycos: $lycos
\n";
print OUT " MSN: $msn
\n";
print OUT " Compuserve: $compuserve
\n";
print OUT " Fireball: $fireball
\n";
print OUT "
\n";
close OUT;
close IO;