100 последних запросов с поисковиков (php)
Автор: Дмитрий Смирнов
Сайт: spectator.ru
Народ регулярно спрашивает, как сделаны поисковики, как будто это что-то сложное.
На самом деле это на редкость примитивно, пардон, до гениального просто.
Поисковики — такие же сайты, как и все остальные (сюрприз, да?), поэтому если к
вам зашли с поисковика, адрес, с которого зашли, тобишь реферер, легко
отслеживается.
Сначала — находим УРЛ, с которого к вам зашли на сайт:
<?php
$url = urldecode($HTTP_REFERER);
Проверяем: а) есть ли вообще реферер, б) не является ли он внутренним, то
есть с вашего же сайта (вместо spectator.ru, разумеется, в вашем случае треба
подставить что-то другое).
if (($url!='') and (!stristr ($url, 'spectator.ru')));
После чего проверяем, принадлежит ли адрес, с которого пришли, к
какому-нибудь поисковику:
if ((stristr($url, 'yandpage')) or (stristr($url, 'yandsearch')))
{ $sw = 'text='; $engine = 'Y'; }
if(stristr($url, 'http://search.rambler.ru/'))
{ $sw = 'words='; $engine = 'R'; }
if(stristr($url, 'http://sm.aport.ru/')) { $sw='r='; $engine = 'A'; }
if(stristr($url, 'google.')) { $sw='q='; $engine = 'G'; }
if(stristr($url,
'google.yahoo.com')) { $sw='p='; $engine = 'H'; }
Добавьте поисковик(и) по вкусу сами. Обратите внимание, здесь мы убиваем трех
зайцев: проверяем, пришли ли люди с поисковика, определяем, с какого ($engine) и
устанавливаем соответствующий для данного поисковика параметр $sw. $sw — это
кусок текста в УРЛЕ, после которого, собственно, и идет текст запроса, смотрите
пример выше: для Яндекса текст запроса идет после «text=».
И тут, наконец, проверяем, пришли ли с поисковика…
if(isset($engine));
И если пришли, то:
$url2=urldecode($url);
if (stristr($url, 'yandpage')) {$url2=convert_cyr_string
($url2, k, w);}
Если пришли с Яндекса, то перекодируем УРЛ (он почему-то всегда в КОИ).
eregi ($sw.'([^&]*)', $url2.'&', $url2);
$url2=$url2[1];
Именно в этих 2-х строчках мы и вычленяем запрос, то есть переменная $url2
теперь содержит текст запроса в человеческом виде.
И все, собственно. Дальше все очень просто. У меня, например, это все пишется
в простой файл вот в таком виде:
$fullfile='[ <small><b>'.$engine.'</b></small> ] :: <a href='.$HTTP_REFERER.'>'.$url2.'</a> ::
попал <a href='.$REQUEST_URI.'>сюда</a> <small> [ '.date('d.m.Y H:i').' ]</small><br>\n';
Дальше не забыть поставить:
else:
И тут обработчик тех реферов, которые были НЕ с поисковых систем, после чего,
конечно же идёт:
endif; ?>
И после недолгих мучений скрипт смотрится примерно
вот так. Как видите,
все очень просто.