Почему-то вебмастера ленятся сделать нормальный поиск по своему сайту. Особенно это касается высокопосещаемых сайтов, где качественный поиск был бы очень удобен для рядового пользователя.
Чаще всего прибегают к готовому решению от Google, с помощью которого можно еще и подзаработать на контекстной рекламе. Но для рунета я бы посоветовал сделать поиск при помощи сервиса Yandex.XML, потому что такой поиск больше адаптирован под морфологию русского языка. К тому же вы можете получить шанс получить самые жирные биды для контекста, если будете использовать поисковый директ.
В этом посте я хочу подробно показать вам, что подобный поиск организовать совсем не сложно. Это займет всего несколько минут и выльется в десяток строк на PHP.
Шаг 1: Регистрация IP на сервисе яндекс
Для начала идем на http://xml.yandex.ru/ и регистриуем свой IP:
Шаг 2: Читаем маны
На сервисе довольно запутанная навигациия, поэтому я сразу даю ссылку на документацию по поисковому запросу
Шаг 3: Пишем программу на PHP
Далее привожу часть своей программы, из которой станет понятно как создать аналогичный модуль для своего сайта.
Получаем строку для поиска методом GET или POST
Я прогоняю эту переменную через регулярку, дабы всякие шалуны не вздумали пихать туда что попало, такс, на всякий пожарный.
Сервер XML-поиска Яндекса принимает поисковые запросы из входного потока методом POST (в формате XML). Также запросы принимаются методом GET по адресу xmlsearch.yandex.ru/xmlsearch Я не стал особо мудрить и решил использовать метод GET. $page — это номер страницы, начиная с 0, а yousite.ru — ваш сайт, по которому будет вестись поиск.
Отправляем GET запрос в яшу:
Дальше я удалил из XML файла часть поискового запроса (<< host=«yoursite.ru»), для того, чтобы он «не мешался под ногами».
(не забудьте убрать пробелы)
XML ответ у нас теперь есть. Теперь возьмем шаблон XSL для того, чтобы вставить туда наши данные. Различные шаблоны можно найти на самом сервисе яндексе.xml, а здесь я дам ссылку на свой шаблон, который вам придется заточить под себя. Кажется я и сам нашел его где-то на просторах интернета, потому в нем будет довольно много «мусора».
Я надеюсь, что вы интуитивно в нем все-таки разберетесь. Впринципе, все довольно просто.
Загружаем наш XSL шаблон, у меня это делает smarty, а у вас, допустим будет вот так:
Ну вот и все, остается только воспользоваться мощью PHP5 и соединить все это воедино:
Ну, и еще я поменял кодировку на utf-8:
Распечатываем наш результат:
Вот и вся наука. Пример реализации можно посмотреть у меня на блоге. Как видите прикрутить поиск по сайту на основе Yandex.XML не так уж и сложно!
Я не считаю себя гуру программирования, возможно я упустил какие-то детали, или какие-то места выглядят не очень красиво с точки зрения программиста. Укажите, пожалуйста, мне на мои недочеты, буду очень признателен.
Еще по теме:
PHP класс для работы с Яндекс.XML
Чаще всего прибегают к готовому решению от Google, с помощью которого можно еще и подзаработать на контекстной рекламе. Но для рунета я бы посоветовал сделать поиск при помощи сервиса Yandex.XML, потому что такой поиск больше адаптирован под морфологию русского языка. К тому же вы можете получить шанс получить самые жирные биды для контекста, если будете использовать поисковый директ.
В этом посте я хочу подробно показать вам, что подобный поиск организовать совсем не сложно. Это займет всего несколько минут и выльется в десяток строк на PHP.
Шаг 1: Регистрация IP на сервисе яндекс
Для начала идем на http://xml.yandex.ru/ и регистриуем свой IP:
Шаг 2: Читаем маны
На сервисе довольно запутанная навигациия, поэтому я сразу даю ссылку на документацию по поисковому запросу
Шаг 3: Пишем программу на PHP
Далее привожу часть своей программы, из которой станет понятно как создать аналогичный модуль для своего сайта.
Получаем строку для поиска методом GET или POST
$q = $_GET['q'];
Я прогоняю эту переменную через регулярку, дабы всякие шалуны не вздумали пихать туда что попало, такс, на всякий пожарный.
$q = preg_replace("/[^а-яА-Я\d\w\s]/iu", "", $q);
Сервер XML-поиска Яндекса принимает поисковые запросы из входного потока методом POST (в формате XML). Также запросы принимаются методом GET по адресу xmlsearch.yandex.ru/xmlsearch Я не стал особо мудрить и решил использовать метод GET. $page — это номер страницы, начиная с 0, а yousite.ru — ваш сайт, по которому будет вестись поиск.
$ya_query = "http://xmlsearch.yandex.ru/xmlsearch" . "/?page=" . $page . "&query=" . urlencode($q . " << host=\"yoursite.ru\"");
Отправляем GET запрос в яшу:
$xml_data = file_get_contents($ya_query);
Дальше я удалил из XML файла часть поискового запроса (<< host=«yoursite.ru»), для того, чтобы он «не мешался под ногами».
$xml_data = str_replace("& lt ;& lt ; host=& quot ;yoursite.ru& quot ;", "", $xml_data);
(не забудьте убрать пробелы)
XML ответ у нас теперь есть. Теперь возьмем шаблон XSL для того, чтобы вставить туда наши данные. Различные шаблоны можно найти на самом сервисе яндексе.xml, а здесь я дам ссылку на свой шаблон, который вам придется заточить под себя. Кажется я и сам нашел его где-то на просторах интернета, потому в нем будет довольно много «мусора».
Я надеюсь, что вы интуитивно в нем все-таки разберетесь. Впринципе, все довольно просто.
Загружаем наш XSL шаблон, у меня это делает smarty, а у вас, допустим будет вот так:
$handle = fopen($filename, "r");
$xsl_data = fread($handle, filesize($filename));
fclose($handle);
Ну вот и все, остается только воспользоваться мощью PHP5 и соединить все это воедино:
$xh = new xsltprocessor();
$xml = new DOMDocument();
$xsl = new DOMDocument();
$xml->loadXML($xml_data);
$xsl->loadXML($xsl_data);
$xh->importStyleSheet($xsl);
$search_result = $xh->transformToXML($xml);
Ну, и еще я поменял кодировку на utf-8:
$search_result = iconv("windows-1251", "utf-8", $search_result);
Распечатываем наш результат:
print $search_result;
Вот и вся наука. Пример реализации можно посмотреть у меня на блоге. Как видите прикрутить поиск по сайту на основе Yandex.XML не так уж и сложно!
Я не считаю себя гуру программирования, возможно я упустил какие-то детали, или какие-то места выглядят не очень красиво с точки зрения программиста. Укажите, пожалуйста, мне на мои недочеты, буду очень признателен.
Еще по теме:
PHP класс для работы с Яндекс.XML