|
Google PHP Referer auslesen - Suchergebnisse
Wenn man einem Link von einer Seite folgt und auf diesen klickt, wird in der
Regel der sogenannte Referer mit an die neu betretene Homepage gesendet. Der
Referer sagt der neuen Homepage, von welcher Homepage der Surfer gerade
gekommen ist. Unteranderem kann dies interessant sein, um auszuwerten von
welchen fremden Seiten die Leute so kommen.
Ich möchte in diesem Beispiel den Referer auslesen und bearbeiten.
In diesem speziellen Fall interessiere ich mich für alle Leute, die über
die Suchmaschine Google gekommen sind. Mich interessiert: "Wonach haben die in
der Suchmaschine gesucht und diese Seite gefunden ?"
Bisher gespeicherte Google Suchen: (seit 09.2009)
Hier die LIVE Ergebnisse für php-kurs.info (neueste Suche oben):
TLD: |
IN GOOGLE WURDE GESUCHT: |
START: |
ANZAHL: |
TLD: = Repräsentiert die Google Domainendung (.de, .com, .at usw)
START: = Übersprungene Suchergebnisse (0=unter den ersten Suchergebnissen)
ANZAHL: = Anzahl angezeigter Suchergebnisse pro Seite
Wie liest man den Referer aus ?
In PHP gibt es eine Vielzahl von Daten die wir in dem Array $_SERVER
wiederfinden, unter anderem auch den Referer. Der Referer wird abgefragt mit:
<?php $_referer = $_SERVER["HTTP_REFERER"]; ?>
|
So speichern wir den Referer in der Variable $_referer. Ein zurückgegebener Referer
könnte zum Beispiel so aussehen:
http://www.google.de/search?hl=de&q=php+Grundkurs
Woher wissen wir nun diese ganzen Details über Google ?
Dazu müssen wir den Referer analysieren.
Einige Eigenarten dieser Adresse bei Google sind immer gleich. Anhand der Domain
von Google können wir bestimmen über welche Ländersuche derjenige
gesucht hat. Sucht jemand bei google.de, dann hat er warscheinlich deutsche Ergebnisse
gesucht. Sucht jemand über google.pl, dann hat er warscheinlich polnische
Ergebnisse gesucht. Weiterhin wird der Suchbegriff über das q= mit
angegeben. Wir müssen also nur den Text dahinter rausfiltern und mit
urldecode(); den kodierten String wieder zurückwandeln.
Er wurde vorher kodiert, damit er in der Adresszeile mit angegeben werden kann.
Filtern der Suchergebnisse mit Regulären Ausdrücken
Zum herausfiltern der Suchergebnisse verwenden wir reguläre Ausdrücke. Diese
sind nicht ganz einfach zu verstehen, bieten aber die einfachste Möglichkeit
Zeichenketten zu zerlegen. Eine ganz genaue Beschreibung darüber findet man auf
Wikipedia.
Mit Hilfe eines Regulären Ausdrucks beschreiben wir PHP was wir suchen und PHP liefert
uns das Ergebnis.
<?php $_referer = $_SERVER["HTTP_REFERER"]; preg_match('/google\.(.*)\//Uis', $_referer, $_google["land"]); ?>
|
Erklärung:
Im regulären Ausdruck gibt es den ersten Teil, wo wir beschreiben müssen,
was wir genau suchen. Im zweiten Teil müssen wir einige Modifier (Optionen) setzen -
PHP also sagen wie er sich in bestimmten Fällen verhalten soll.
Die Syntax lautet dafür also: Delimiter + Regex + Delimiter [+ Modifiers]
Unser Regulärer Ausdruck heisst: /google\.(.*)\//Uis
Wir suchen damit alles was zwischen google. und einem / steht. Wir
wollen in diesem Fall die Domainendung haben.
Wir klammern das was wir suchen mit dem Zeichen / ein und geben die Optionen
hinter dem zweiten / an. Unsere Optionen lauten Uis:
/google\.(.*)\//Uis
Ihr wundert euch, warum wir vor dem Punkt und vor dem / einen Backslash \ geschrieben haben ?
Ein Punkt steht in einem regulären Ausdruck für einen beliebigen Text der folgen kann. Wir
wollen aber nicht einen beliebigen Text finden, sondern genau diesen Punkt - daher maskieren wir den
Punkt mit dem Backslash \ und sagen PHP damit, dass er das kommende Zeichen nicht als Befehl
sehen soll. Außerdem suchen wir das / aus der Internetadresse. In diesem Fall haben
wir aber / als Trennzeichen genommen ; zwischen dem regulären Ausdruck den wir suchen und
den "Optionen" die wir gesetzt haben. Damit PHP wieder versteht, dass hier der reguläre
Ausdruck nicht zuende ist und wir genau dieses Zeichen suchen haben wir es maskiert: \/
Anhand der modifier (Optionen) sagen wir PHP unteranderem mit dem i, ob er Groß- und
Kleinschreibung dabei beachten soll. Reguläre Ausdrücke seien hier in dem Thema nur
kurz zur Erklärung angerissen. Eine genaue und ausführliche Erklärung erhaltet Ihr
in unseren Tutorials. RegularExpressions sind ein mächtiges Werkzeug.
Den Referer mit RegExp zerlegen
Unser Programmcode womit wir prüfen, ob jemand von Google gekommen ist. Wenn dem
so ist, dann wird der Referer zerlegt und ausgewertet:
<?php $_ref = $_SERVER['HTTP_REFERER'];
if (eregi('google\.', $_ref)) { # Besucher kommt von Google $_ref .= '&';
preg_match('/google\.(.*)\//Uis', $_ref, $_google['land']); preg_match('/q=(.*)&/UiS', $_ref, $_google['suchbegriff']); preg_match('/start=(.*)&/UiS', $_ref, $_google['start']); preg_match('/num=(.*)&/Uis', $_ref, $_google['anzahl']);
$_google['suchbegriff'][1] = urldecode($_google['suchbegriff'][1]);
var_dump($_google); } ?>
|
Erst wird geprüft, ob das Wort google. in dem Referer vorkommt. Wenn dem so ist,
dann wird die Zeichenkette zerlegt. Vorher noch fügen wir an das Ende dieser
Zeichenkette das &. Dies hat den Vorteil die regulären Ausdrücke
einfacher gestalten zu können. So kann immer davon ausgegangen werden, das
nachdem etwas in der Adresszeile mit = gesetzt wurde auch mit &
abgeschlossen wird, da in einer Adresszeile die übergebenen Parameter ja alle
mit diesem Zeichen getrennt werden.
Achtung: wenn Ihr die Daten in eine Datenbank schreibt und die
Umlaute nicht korrekt dargestellt werden, dann müsst Ihr das richtige
Charset verwenden. Ich habe auf meiner Seite bevor ich die Ergebnisse in die
Datenbank geschrieben habe diesen mit einem MySQL Befehl vorher bestimmt:
set character set utf8
set names utf8
|