BVIsoft.com - документация, статьи и примеры по PHP. [Назад]

100 последних запросов с поисковиков[Печать]
Разместил: admin . Раздел: Интересное. Опубликовано: 07-25-2007 21:08:37

Народ регулярно спрашивает, как сделано вот это, как будто это что-то сложное. На самом деле это на редкость примитивно, пардон, до гениального просто. Но так как спрашивают регулярно... работает, в общем, это все примерно так:

Поисковики - такие же сайты, как и все остальные (сюрприз, да), поэтому если к вам зашли с поисковика, адрес, с которого зашли, тобишь реферер, легко отслеживается. При этом текст запроса уже содержится в УРЛЕ, с которого к вам зашли, например: http://yandex.ru/yandsearch?text=%EF%EE%E8%F1%EA+%ED%E0+php. (Правда, часто текст... как это по-русски-то?... URL-encoded, то есть выглядит вот этак: %EF%EE%E8%F1%EA, но это не проблема, у нас есть функция urldecode...).

Собственно, дальше все просто:

Сначала - находим УРЛ, с которого к вам зашли на сайт:

<?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); # just in case

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> ';

А выглядит все вот так: spectator.ru/yandex

Дальше не забыть поставить:

else:

.... и тут обработчик тех реферов, которые были НЕ с поисковых систем, после чего, конечно же ---

endif; ?>

...кончается скрипт...

И после недолгих мучений скрипт смотрится примерно вот так. Как видите, все просто до идиотизма.

Источник: http://www.softportal.com/   Прочитана 729 раз.