1

Тема: Скрипт поиска по сайту на основе Яндекс.XML

Организация поиска по сайту является одной из самых важных и не простых задач при разработке Интернет проекта. Благодаря разработанному нашим проектом скрипту и сервису Яндекс.XML вы сможете без особого труда установить поиск и встроить его в дизайн своего сайта.

Основное преимущество скрипта - максимально возможная скорость вывода данных. Благодаря использованию технологии Ajax страница не перезагружается, а получаемые данные подгружаются в фоне. Чтобы понять о чем речь, можете посмотреть реализацию поиска на нашем сайте: Страница поиска.

Подробное описание установки скрипта смотрите на странице: Скрипт поиска по сайту на основе Яндекс.XML

Если у вас есть вопросы или предложения по улучшению работы скрипта, пожалуйста, пишите нам в данной теме форума.

Отредактировано Hanut (2009-05-07 23:29:25)

ВКонтакте Facebook Twitter

2

Re: Скрипт поиска по сайту на основе Яндекс.XML

Спасибо за мануал! А по какой причине может вылазить "Произошла программная ошибка."?

3

Re: Скрипт поиска по сайту на основе Яндекс.XML

Protei
Как правило, это означает, что Яндекс.XML вообще ничего не вернул.

test.php запускали? Ошибок не выводит?

Проверьте, зарегистрировали ли вы IP сервера на странице http://xml.yandex.ru/ip.xml

ВКонтакте Facebook Twitter

4

Re: Скрипт поиска по сайту на основе Яндекс.XML

Спасибо, что ответили! test.php запускал, ошибок никаких не выводит, но при попытке поиска так же выводит всплывающее окошко с надписью "Произошла программная ошибка.". IP зарегистрирован, но при попытках поиска лимит запросов на Яндексе не снижается.

5

Re: Скрипт поиска по сайту на основе Яндекс.XML

А IP сайта нужно вводить?

6

Re: Скрипт поиска по сайту на основе Яндекс.XML

Protei
IP сайта следует вводить в файле config.php, в переменной $aLocal['ip'].

ВКонтакте Facebook Twitter

7

Re: Скрипт поиска по сайту на основе Яндекс.XML

Да-да, там я само-собой ввел. Вот по этой ссылке http://xml.yandex.ru/ip.xml нужно IP сайта вводить? Я его вводил, в конфиге изменил ip и адрес сайта, но не работает к большому можалению. sad

8

Re: Скрипт поиска по сайту на основе Яндекс.XML

Protei пишет:

Вот по этой ссылке http://xml.yandex.ru/ip.xml нужно IP сайта вводить?

Все верно. На этой странице, слева, есть ссылка "Задайте XML-запрос"; попробуйте работает ли там поиск.

ВКонтакте Facebook Twitter

9

Re: Скрипт поиска по сайту на основе Яндекс.XML

В разделе "Тестировать поиск по сайту" все работает. То есть сайт проиндексирован. А вот в "Задайте XML-запрос" не понял как его правильно задать, так как запрос идет с ip адреса моего компьютера и он естественно выдает ошибку, что ip not found. Если меняю в "Регистрация IP-адреса" на свой ip, а не сайта, то работает.

10

Re: Скрипт поиска по сайту на основе Яндекс.XML

Protei
Если возможно, пришлите, пожалуйста, через внутреннюю почту форума содержимое вашего конфигурационного файла config.php. Посмотрю, может нащупаю причину отказа скрипта.

ВКонтакте Facebook Twitter

11

Re: Скрипт поиска по сайту на основе Яндекс.XML

Я не все понял в данной инструкции. Я не программист. Расскажите поподробнее, как нужно изменить скрипт index, чтобы он заработал на сайте?

12

Re: Скрипт поиска по сайту на основе Яндекс.XML

chij
Сперва необходимо создать на сайте страницу поиска, затем добавить на нее HTML-код, который находится между "Поиск. Начало." и "Поиск. Конец.".
Сверху обязательно должен быть PHP код:

<?php

$sSearch_text = (isset($_REQUEST['find']) && strlen($_REQUEST['find']) > 2)
    ? htmlspecialchars($_REQUEST['find']) : '';

?>

Также проследите, чтобы на странице были подключены файлы JavaScript и CSS:

<link href="search.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="search.js"></script>

ВКонтакте Facebook Twitter

13

Re: Скрипт поиска по сайту на основе Яндекс.XML

Hanut, а как создается страница поиска на сайте? Или просто нужно вставить код на страницу index.php на ftp сайта?

14

Re: Скрипт поиска по сайту на основе Яндекс.XML

chij
На сервере по FTP создайте каталог search (можно и другое название, если хотите), положите в этот каталог файл index.php, теперь при заходе по адресу домен_сайта.ру/search - будет выведен шаблон страницы поиска.

Думаю оформить страницу вам будет проще, если отредактировать файл search/index.php, необходимо только разместить теги оформления вставив блок в комментариях "Поиск. Начало." и "Поиск. Конец." внутрь сайта.

ВКонтакте Facebook Twitter

15

Re: Скрипт поиска по сайту на основе Яндекс.XML

Hanut, я не могу зайти на домен сайта/search (prinural.ru/search). На ftp положил папку '''search'' в корневой каталог сайта. Но браузер не открывает документы ''.php''. Открываются они только в Macromedia Dreamweaver.
"Думаю оформить страницу вам будет проще, если отредактировать файл search/index.php, необходимо только разместить теги оформления вставив блок в комментариях "Поиск. Начало." и "Поиск. Конец." внутрь сайта". Этот файл search/index.php затем надо положить в корень сайта, заменив старый index.php?

16

Re: Скрипт поиска по сайту на основе Яндекс.XML

chij
Думаю вам следует обратиться за помощью к разработчику сайта, иначе сложно будет разобраться что и почему не работает. Я могу только предположить, что проблема может быть в настройках файла .htaccess.

ВКонтакте Facebook Twitter

17

Re: Скрипт поиска по сайту на основе Яндекс.XML

Как можно организовать поиск по региону?

18

Re: Скрипт поиска по сайту на основе Яндекс.XML

stalkerexe
Ответ здесь:
http://help.yandex.ru/xml/faq.xml?id=449567#449569

Что касается изменения в скрипте, то для поиска по регионам следует изменить вид запроса и установить ваш регион.
Страница списка региональных идентификаторов используемых Яндексом - http://search.yaca.yandex.ru/geo.c2n . Найдите на этой странице ваш регион и прибавьте к числу идентификатора 11000000. Например: Самара - код 51, значит значение будет 11000051.

Пропишите код региона в файле config.php в переменной $aLocal['host'] (здесь пример поиска по Самаре):

$aLocal['host'] = '11000051';

Откройте файл request.php и найдите строку:

$aLocal['host_s'] = sprintf('host="%s"', $aLocal['host']);

Измените ее следующим оразом:

$aLocal['host_s'] = sprintf('cat=(%s)', $aLocal['host']);

ВКонтакте Facebook Twitter

19

Re: Скрипт поиска по сайту на основе Яндекс.XML

В связи с изменением в выдаче Яндекс.XML тега hlword, который отвечает за подсветку искомой фразы, в скрипт поиска были внесены изменения. Обновленный скрипт имеет версию 0.2 и находится в общественном доступе на странице: http://php-myadmin.ru/learning/search.html

ВКонтакте Facebook Twitter

20

Re: Скрипт поиска по сайту на основе Яндекс.XML

Доброго

Имеются странности с поиском вашим скриптом.

Браузер: FF 3.5, ОС - WinXpSp2
Есть ссылка: http://www.souzholod.ru/search/

Вводим слово "чиллер". Получаем итог. Жмем на третью - получаем итог.

А вот нажав на страницу номер два - мы получаем баг
http://clip2net.com/clip/m7814/1258011584-clip-2kb.png

Затененная кнопка поиск и ни одного результата поиска.
При чем такой эффект достигается исключительно для второй страницы.

С чем связано это?
Можно ли модернизировать как-то, чтоб кнопка не залипала в режиме disabled?

Я включил логирование в request.php. Там видно, что данные приходят все три раза. Для каждой страницы.
JS-файл не менял. Исключительно указал просто иной путь до реквеста.

21

Re: Скрипт поиска по сайту на основе Яндекс.XML

xenos
Спасибо за указание на ошибку.

На второй странице поиска Яндекс выдает такие строки:
<url>
http://www.souzholod.ru/files/prices/pricelist2.pdf
</url>
<domain>www.souzholod.ru</domain>
<title>?????-???? ????????? ?? 17-04  </title>

В title видны крякозябы, их причину я сказать не могу, но на 49 строке идет перекодирование данных в windows-1251, где из-за ошибки все и обрывается. Ошибку iconv вызывают именно данные крякозябы.
Строку 49:
if (isset($print)) print iconv('utf-8', 'windows-1251', $print);
Поменяйте на:
if (isset($print)) print iconv('utf-8', 'windows-1251//TRANSLIT', $print); // Все некорректные символы iconv постарается заменить на похожие из конечной кодировки.
Либо так:
if (isset($print)) print iconv('utf-8', 'windows-1251//IGNORE', $print); // Все некорректные символы iconv игнорирует, не выводит.

Попробуйте оба варианта. Я бы предпочел первый, //TRANSLIT, но не уверен, что он оптимален. Возможно лучше такие символы игнорировать.

Как только отпишитесь, я внесу изменения в текущую версию скрипта.

ВКонтакте Facebook Twitter

22

Re: Скрипт поиска по сайту на основе Яндекс.XML

Hanut пишет:

В title видны крякозябы, их причину я сказать не могу

Это текст из PDF. По ходу где-то, что-то  не так одупляется. Может и сам яндекс не отдает в верной кодировке.


Hanut пишет:

Я бы предпочел первый, //TRANSLIT, но не уверен, что он оптимален.

http://clip2net.com/clip/m7814/1258106384-clip-19kb.png

http://clip2net.com/clip/m7814/1258106599-clip-15kb.png

Благодарствую.
smile


Никак не мог понять чем 2 хуже 1 lol

23

Re: Скрипт поиска по сайту на основе Яндекс.XML

Благодаря помощи xenos, в связи с ошибкой при конвертации данных функцией iconv скрипт поиска обновлен до версии 0.3. Ошибка устранена.

Скрипт поиска по сайту на основе Яндекс.XML

ВКонтакте Facebook Twitter

24

Re: Скрипт поиска по сайту на основе Яндекс.XML

Каким образом получить текст запроса <query> из XML?
В request.php пробую писать так

$print .= '<query>' . $yandexsearch->request->query . '</query>' . "\n";

к примеру хочу вставить  текст запроса (query) после Результат поиска: страниц - [object Element] 1016
а вообще нужно получать её чтобы вставлять в  $text  Сохраненная копия
мой пример тут http://search.vegabus.org/search/

25

Re: Скрипт поиска по сайту на основе Яндекс.XML

stalkerexe
Думаю нет никакой необходимости брать запрос из ответа Яндекса, так как он итак присутствует в поле ввода.

Файл search.js, строка 124.

oDIV.innerHTML = 'Результат поиска: страниц - ' + XML_found.firstChild.data + ' ' + document.getElementById('search_text').value;
// Или делаем так.
var search_text = document.getElementById('search_text').value; // Заносим в переменную значение из поля поиска.
var text_encode = encodeURIComponent(search_text); // Переменная содержит закодированное значение поля поиска для использования в ссылке (url). Переменная может использоваться в ссылке "Сохраненная копия".
oDIV.innerHTML = 'Результат поиска: страниц - ' + XML_found.firstChild.data + ' ' + search_text;

ВКонтакте Facebook Twitter