Bounjoun alle,
Die Aufgabe: aus dem Referrer-String (derzeit) sechs Suchmaschinen auswerten, den eingegebenen Suchbegriff extrahieren und die Ausbage nach Vorkommenshäufigkeit präsentieren.
Die Lösung: Perl-technisch kein großes Problem, vielleicht läßt sich das eleganter Lösen - das ist aber nicht das Problem, dieses wird danach beschrieben:
my %se; # search engines
my %kw; # keywords, keyphrases
for (keys %ref) { # %ref wird weiter oben im Programm mit Referrer-Strings befüllt
$se{Google}++ if $_ =~ /\.google\./;
$se{Yahoo}++ if $_ =~ /\.yahoo\./;
$se{bing}++ if $_ =~ /\.bing\.com/;
$se{'Web.de'}++ if $_ =~ /suche\.web\.de/;
$se{Altavista}++ if $_ =~ /\.altavista\./;
$se{'T-Online'}++ if $_ =~ /navigationshilfe|suche\.t-online\./;
if ( $_ =~ /(?<![a-z])(q=|r=|search=|query=|p=)(.+?)(&.*)*$/g ) {
my $query = $2;
$query =~ s/(%20)+/$1/g; # durch Mehrfachleerzeichen enstandene Doubletten in der Ausgabe vermeiden
$query = $cgi->unescape($query); #URL-decoden
$kw{$query}++;
}
}
Am Ende enthält %kw so was wie:
'Atomic Eggs' => 4,
'Patrick Andrieu' => 2,
'Corel Draw kann keine templates öfnnen' => 1,
etc...
Die HTML-Ausgabe (UTF-8) sieht tabellarisch dann so aus:
| Anzahl | Suchwort/-begriff
1 | 4 | Atomic Eggs
2 | 2 | Patrick Andrieu
3 | 1 | Corel Draw kann keine templates öfnnen
Beispiel hier: http://www.pagecount.org/oae/counter/pv.pl?month=this&target=refs, unterste Tabelle (Daten zum Einloggen: atomic, eggs).
Das Problem: solange ich nur mit UTF-8-Encoding zu tun habe, gibt es keins. Doch, und der dritte Suchbegriff im obigen Beispiel habe ich nicht erfunden, sind immer wieder andere Daten zu finden.
Corel Draw kann keine templates öfnnen
Abgesehen davon, dass der oder die Suchende ein »f« zu wenig und dafür ein »n« zu viel im Wort »öffnen« in Google eingetippt hatte, sah der URL-Encodete »Rohbegriff« in der Logfile so aus:
Corel Draw kann keine templates %F6fnnen
Ausgegeben wird:
Corel Draw kann keine templates �fnnen
Da schauen wir uns mal den gesamten Referrer-String an:
http://www.google.de/custom?q=Corel Draw kann keine templates %F6fnnen&sa=Suchen&client=pub-4347119884249993&forid=1&channel=8272761113&ie=ISO-8859-1&oe=ISO-8859-1&cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1%3B&hl=de&meta=
Aha: &ie=ISO-8859-1&oe=ISO-8859-1
Die Frage: Da ich nicht wissen kann, wie User ihre Clients konfigurieren (genausowenig, wie sie sich vertippen *g*), was habe ich noch für Möglichkeiten, dass die Ausgaben immer korrekt ist:
Corel Draw kann keine templates öfnnen
Adiou.