Яндекс поиск на вашем сайте.

    Приведу пример класса, который можно использовать в качестве поисковика на вашем сайте.
    Для работы класс использует сервис Яндекс.XML. В свободном режиме они разрешают использовать до 1000 запросов в день. Условия использования сервиса на xml.yandex.ru

    Яндекс.XML — это сервис, позволяющий делать автоматические поисковые запросы к Яндексу и публиковать его ответы у себя на сайте в собственном дизайне. Поиск от Яндекса — это быстрый доступ к сотням миллионов документов и изображений.

    С помощью Яндекс.XML вы можете предлагать своим пользователям:
    • поиск по вашему сайту (в той мере, в какой этот сайт проиндексирован Яндексом);
    • поиск по сети или ее части (регион, отрасль), результаты которого могут показываться на вашем сайте и в вашем дизайне, и сервисы на его основе — Яндекс.XML открывает большие возможности для исследователей поисковых систем и преподавателей;
    • поиск изображений, опубликованных в сети.



    Данный скрипт реализует работу только полнотекстового поиска.

    Пример работы скрипта, можно посмотреть здесь: kolesa.kz/search/?stext=Toyota

    Изначально класс писался для сайта, чьи исходники в формате ANSI (windows 1251). Поэтому в коде могут повстречаться интересные ICONV. Причина появления таких перекодировок следующая: ответ приходит в UTF-8 а сам код в cp-1251. И чтобы в результате смешения кодировок не получился СЮРПРИЗ, приходится изгаляться.

    Для работы вы можете все подчистить, и сделать так как вам нравиться. Это всего лишь пример.

    Класс не использует никаких шаблонов, для целостности примера. Чтоб вы могли его запустить сразу.
    Единственно необходимо удостовериться в том, что:
    • у вас PHP5
    • хостер вам разрешает работать с сокетами
    • подключено расширение для php под название DOM
    • вы зарегистрировались на Яндексе и вбили IP адрес вашего сервера
    • define(«SEARCH_ADT_QUERY»,«<< url=\»kolesa.kz/content/*\«»); — указывает на ваш сайт


    Класс находится по адресу: docs.google.com/Doc?id=dcn4jhdv_4gt4qgzfq

    UPD0 Вариант скрипта от Яндекса: xml.yandex.ru/games/site-search-php.html (спасибо Normull, когда писали класс, этого еще не было)

    UPD1 На который у меня не хватило сил, но отлично дополнил Groove:
    Для партнеров яндекса, установивших поисковой директ на свои сайте это ограничение снимается.
    Т.е., если вы дадите пользовать результатами поиска всем его посетителям, при условии, что там стоит Директ на сайте — вас никто не забанит.
    А вот если вы просто собираете выдачу например для seo-анализа, бан неминуем.
    Только про это имелось в виду.

    Метки:
    Поделиться публикацией
    Комментарии 26
    • 0
      Спасибо. Попробуем…
      • +2
        Спасибо за подробные комментарии в коде, это облегчает понимание происходящего.
        • +1
          Дух захватывает от количества кода! Хотя, в принципе, ничего космического :)
          • 0
            С CURL можно было бы его сократить. Но чет, мне с сокетами милее напрямую работать.
          • +4
            Пора бы уже обуздать дикий Jevix, невероятно поганит код.

            Небольшое замечание: все-таки эти многоярусные конкатенации строк смотрятся ужасно, используйте heredoc, с ним HTML-код в скрипте будет удобнее писать и читать.

            Спасибо.
            • +1
              Чисто стиличтический момент, а почему использованы define вместо const?

              Да, код Jevix испоганил на 5 8)
              • 0
                как раз то, что надо, спасибо
                • +1
                  Если я не ошибаюсь, то данный класс по сути PHP5 не используют… разве что «private»… а так в целом не плохо.
                  Хотя не совсем понял зачем в классе html код, ему там не место… на мой взгляд.

                  Вобщем для масштабирование половину кода убрать =) оставить только функциональность. :)

                  и опять же в целом молодец.
                  • –1
                    Оч интересно, но как то гугьль пока ближе и меньше мороки :)
                    ну и 1000 запросов как то маловато :(
                    Сайт у которого меньше 1000 запросов спокойно может юзать свою систему поиска и мало кому интересно что то искать с этого сайта в сети :(
                    а за пример Спасибо.
                    • –5
                      Одназначно гугль лучше. Что за ограничние вообще? Русский интернет-гигант, а сервис, получается, для говносайтов чтоли?
                      • +1
                        Для партнеров яндекса, установивших поисковой директ на свои сайте это ограничение снимается.
                        Т.е., если вы дадите пользовать результатами поиска всем его посетителям, при условии, что там стоит Директ на сайте — вас никто не забанит.
                        А вот если вы просто собираете выдачу например для seo-анализа, бан неминуем.
                        Только про это имелось в виду.
                        • –3
                          у google есть подобный сервис?
                        • +1
                          ПривЕду пример класса…
                        • 0
                          Мне кажется, что достаточно было выложить ссылку на эту библиотеку. Кто будет вчитываться в столь длинный листинг?
                          • 0
                            Да, а на Хабре уже выложить примеры использования и описание по настройке использованию
                          • +2
                            CURL + SimpleXML и всй станет куда проще…

                            P.S. Аааа — чудное превращение кавычек…
                            • +3
                              В XML запросе encoding=«windows-1251» — заменить на UTF-8 — и тогде не надо будет выполнять преобразование iconv('windows-1251','utf-8', 'bla-bla-bla')…
                              • +1
                                Преобразование из объекта в массив тоже считаю лишним…

                                P.S. Не сочтите за занудство…
                              • +4
                                Попробуйте положить код не в <blockquote>, а в <code>.
                                • –2
                                  Попробуйте положить код не в <blockquote>, а в <code>.
                                  • +1
                                    на основе yandex.xml делал облако на сайте исходя из количества запросов в сутки по конкретным словам
                                    • +1
                                      Не пробовал, но, кажется, с XSLT будет проще и красивее.
                                      • +1
                                        Здесь все уже есть :)
                                        • 0
                                          Кстати, по моим пробам, SimpleXML быстрее DOM (и вообще ни к чему преобразовывать весь ответ в массив). В этой части у Нормуля скрипт правильнее :)
                                          • 0

                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.