#!/usr/bin/perl ############################################################################### # # # Script: google_performance.pl - Version 0.1.20020813 # # # # Dieses Script durchsucht Apache-Access-Log-Dateien nach Referern, die von # # der Suchmaschine Google erzeugt wurden und gibt das Suchwort, die # # Position, die Sprache und die Zielseite aus. Zusätzlich werden alle # # Folgeseiten, die der Besucher betrachtet hat, ausgegeben. # # # # (c)Arne P. 2002 - http://scripte.arnep.de - arne(at)arnep.de # # # ############################################################################### # # # hier die Dateinamen eintragen # $filename = "access.log"; $outfile = "google.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\n"; ## Zähler auf 0 setzen $zeilen = 0; ## Gesamtzeilen zählen print "Zaehle Zeilen...\r"; while () { $zeilen++; } print "$zeilen Zeilen\n"; ## Log-Datei schließen close IO; ## Log-Datei öffnen open(IO,$filename) or die "Kann Datei $! nicht öffnen zum Lesen"; ## Log-Datei einlesen while () { ## Google String ## log ## IP page query agent if ( $_ =~ m/^((\d+\.\d+\.\d+\.\d{1,3})[^"]* "GET ([^ ]*) [^"]*" .*google\..*\?([^" ]*).? "([^"]*).*)$/ ) { $log = $1; $ip = $2; $page = $3; $agent = $5; $query = "&".$4."&"; $q = ""; if ($query =~ m/[^&]*q=([^& ]*)/) { $q = $1; } if ($query =~ m/[^&]*p=([^& ]*)/) { $q = $1." [via yahoo]"; } if ($query =~ m/[^&]*img...=([^& ]*)/) { if ($query =~ m/.*%3Fq%3D(.*)(%2B|%26)/) { $q = $1." [Bildersuche]"; } } if ($query =~ m/[^&]*num=([^& ]*)/) { $num = $1; } else { $num = "[n/a]"; } if ($query =~ m/[^&]*start=([^& ]*)/) { $num = $1; } if ($query =~ m/[^&]*hl=([^& ]*)/) { $hl = $1; } else { $hl = "[n/a]"; } $found++; ## % umwandeln $q =~ s/\+/ /g; $q =~ s/%E4/ä/ig; $q =~ s/%F6/ö/ig; $q =~ s/%FC/ü/ig; $q =~ s/%df/ß/ig; $q =~ s///ig; $q =~ s/%DC/Ü/ig; $q =~ s/%C3%A4/ä/ig; $q =~ s/%C3%B6/ö/ig; $q =~ s/%C3%BC/ü/ig; $q =~ s/%C3%84/Ä/ig; $q =~ s/%252B/+/ig; $q =~ s/%2522/"/ig; $q =~ s/%2522/"/ig; $q =~ s/%20/ /ig; $q =~ s/%22/"/ig; $q =~ s/%26/&/ig; $q =~ s/%2B/+/ig; $q =~ s/%2C/,/ig; $q =~ s/%2D/-/ig; $q =~ s/%2E/./ig; $q =~ s/%2F/\//ig; $q =~ s/%3A/:/ig; $q =~ s/%3C/\n"; } ## Nachfolgende Zeilen suchen anhand der IP-Adresse ## wenn eine andere IP-Adresse dazuwischen kommt, gehts nicht ## wird noch verbessert if ( $_ =~ m/^((\d+\.\d+\.\d+\.\d{1,3})[^"]* "GET ([^ ]*).*)$/ && ($2 eq $ip) ) { $log = $1; $page = $3; if ($page !~ m/.*gif$/ && $page !~ m/.*jpg$/) { print OUT ""; } } } print OUT "
Nr.SuchstringStartSpracheZielseiteIPAgentLog-Eintrag
$i$q$num$hl$page$ip$agent$log
$i$page$ip$log
"; print OUT "

Statistik:

"; print OUT "

\n"; print OUT "Gesamtzeilenanzahl: $zeilen
\n"; print OUT "Anzahl Stichwörter: $found
\n"; print OUT "

\n"; close OUT; close IO;