Klasse für Suchmaschinenauswertung
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
beispiel
cluster
date
gedacht
information
klasse
lese
log
mhsamer prozess
number
photographie
schreiten
setting
standard
suchbegriff
suchmaschine
szenario
test
verbesserungsvorschlag
zeilenumbruch
-
Ich bin gerade dabei eine Klasse für Suchmaschinen zu erstellen, aber das ist ein wirklich mühsamer Prozess. Und vielleicht hat jemand eine Klasse zur Hand, die das genau oder ähnlich macht.
Was ich will:
Auswertung des $_SERVER['HTTP_REFERER'];
- Was waren die Suchbegriffe (Query-String)
- min. und max. Position beim Seitenaufruf
Beispiel:
$wmsUserRefererQueryStringItems['Number'] steht für 'Angezeigte Elemente' (Standard bei Google: 10)
$wmsUserRefererQueryStringItems['Start'] steht für die Position des ersten Elements, fängt also bei google mit 0 an und geht dann in 10er Schritten vorwärts
Szenario: Ein Besucher gibt bei Google die Suchbegriffe "PHP + Photografie" ein und findet auf den ersten beiden Seiten nicht die relevanten Informationen, aber dann auf Seite 3 einen Link auf meine Seite
Er ruft die Seite mit dem Referer www.google.de/search?q=PHP+%2B+Photographie&num=50&hl=de&start=150&sa=N auf
Ergebnis:
$wmsUserRefererHost = google
$wmsUserRefererType = Suchmaschine
$wmsUserRefererQueryString = PHP+%2B+Photographie
$wmsUserRefererQueryStringItems['Number'] = 50
$wmsUserRefererQueryStringItems['Start'] = 150
$wmsUserRefererSearchEnginePositionMin = 150
$wmsUserRefererSearchEnginePositionMax = 199
$wmsUserRefererSearchEnginePositionAverage = (199 + 150 + 1) / 2
Was ich schon habe:
<?php $wmsUserReferer = $_SERVER['HTTP_REFERER']; $wmsUserRefererHost = parse_url($wmsUserReferer, PHP_URL_HOST); $wmsUserRefererQueryString = parse_url($wmsUserReferer, PHP_URL_QUERY); $wmsUserRefererType = '0'; if (strpos($wmsUserReferer, 'blog') == TRUE) { // einfach Überprüfung, ob die Seite ein Blog ist *g* // und wird noch erweitert $wmsUserRefererType = 'blog'; } if (strpos($wmsUserReferer, '.google.') == TRUE) { $wmsUserRefererType = 'searchEngine'; $wmsUserRefererQueryStringItems['QueryString'] = $wmsUserRefererQueryString['q']; $wmsUserRefererQueryStringItems['Number'] = $wmsUserRefererQueryString['num']; $wmsUserRefererQueryStringItems['Start'] = $wmsUserRefererQueryString['start']; $wmsUserRefererQueryStringItems['Lang'] = $wmsUserRefererQueryString['hl']; // keine Ahnung, wofür SA steht, aber es wird erstmal mitgenommen! $wmsUserRefererQueryStringItems['Sa'] = $wmsUserRefererQueryString['sa']; // Beispiel-Strings // search?q=test&num=100&hl=de&start=500&sa=N // search?hl=de&q=test&btnG=Google-Suche&meta= } else if (strpos($wmsUserReferer, '.yahoo.') == TRUE) { $wmsUserRefererType = 'searchEngine'; } else if (strpos($wmsUserReferer, '.msn.') == TRUE) { $wmsUserRefererType = 'searchEngine'; } else if (strpos($wmsUserReferer, '.live.com') == TRUE) { $wmsUserRefererType = 'searchEngine'; // if (strpos($wmsUserReferer, '.live.com/?mkt=de-de') == TRUE) } else if (strpos($wmsUserReferer, 'search.aol.com') == TRUE) { $wmsUserRefererType = 'searchEngine'; // http://search.aol.com/aolcom/search?query=test&page=7&userid=2583023034761430019&invocationType=topsearchbox.settings&clickstreamid=2583023034761430017 // http://suche.aol.de/suche/web/search.jsp?q=test&cluster=&normalization_level=a&famFilter=off&lr=lang_de&langRestrict=2&cpi=5 } ?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das Problem, was ich dabei sehe ist, dass wenn ein Suchwort eingibt, auf das du überprüfst. Beschäftige dich lieber mit preg_match(). Das ist auch für sowas gedacht, wohingegen strpos() ja eigentlich nur die Position zurückgibt.
http://www.php.net/manual/de/function.preg-match.php -
Nicht böse sein, aber ich weiss gar nicht was du meinst...
und strpos reicht doch in dem Fall aus. Es soll ja nur der Referer ausgewertet werden -
Zum Beispiel steht in diesem Link ".google." obwohl der Host gar nicht google ist.
http://search.yahoo.com/search;_ylt=A0geuq5hT9pFfa4AbMhXNyoA?p=kekse+-.google.&ei=UTF-8&fr=yfp-t-501&x=wrt
Wie wäre es, wenn du die ersten Zeichen des Referrers nach dem Host untersuchen und dann per preg_match an jeden Host angepasst die Datein rauslesen würdest? (Dazu den php.net-Link von oben anschauen.) -
stimmt eigentlich, aber dann kann ich es doch noch einfacher machen
ich lese doch gleich am Anfang
$wmsUserRefererHost = parse_url($wmsUserReferer, PHP_URL_HOST);
dann statt if (strpos($wmsUserReferer, '.google.') == TRUE)
gleich if ($wmsUserRefererHost == 'google') einsetzen... wäre das nicht einfacher und besser? -
// Wann war eine Suchmaschine da? $trackUrl = $_SERVER['PHP_SELF'] ; $trackUserAgent = strtolower($_SERVER['HTTP_USER_AGENT']); if (stristr($trackUserAgent ,"archiver")) {$trackRobot="Alexa";} if (stristr($trackUserAgent ,"exabot")) {$trackRobot="Exalead";} if (stristr($trackUserAgent ,"fast")) {$trackRobot="Fast";} if (stristr($trackUserAgent ,"firefly")) {$trackRobot="Fireball";} if (stristr($trackUserAgent ,"googlebot")) {$trackRobot="Google";} if (stristr($trackUserAgent ,"msnbot")) {$trackRobot="MSN";} if (stristr($trackUserAgent ,"msnbot-media")) {$trackRobot="MSN-Media";} if (stristr($trackUserAgent ,"yahoo")) {$trackRobot="Yahoo";} if (stristr($trackUserAgent ,"yahoo! slurp")) {$trackRobot="Yahoo Slurp";} if (stristr($trackUserAgent ,"surveybot")) {$trackRobot="ServeyBot";} if (stristr($trackUserAgent ,"bot")) {$trackRobot="unbekannte Suchmaschine";} $trackDate = date('Y-m-d'); $trackTime = date('H:i:s'); $trackHost = $_SERVER['HTTP_HOST']; $trackAddr = $_SERVER['REMOTE_ADDR']; if (empty($_SERVER['HTTP_REFERER'])) { $trackReferer = '0'; } else { $trackReferer = $_SERVER['HTTP_REFERER']; } if (!empty($trackRobot)) { // Suchmaschinen // /* $eingeloggt = " trackrobot = $trackRobot trackagent = $trackUserAgent trackurl = $trackUrl trackdate = $trackDate tracktime = $trackTime trackhost = $trackHost trackaddr = $trackAddr "; */ $logdatei = fopen("logs/robotAgents.txt","a"); fputs($logdatei, date("d.m.Y;H:i:s",time()) . ";" . $trackAddr . ";" . $_SERVER['REQUEST_METHOD'] . ";" . $trackUrl . ";" . $trackUserAgent . ";" . $trackHost . ";" . $trackReferer . $wmsSystemWordwrap );
Jemand Verbesserungsvorschläge oder Ideen?
$wmsSystemWordwrap steht für Zeilenumbruch angepasst für Win und Linux -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage