Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Опубликовано 11 января 2010 г. 13:32 | Coding4Fun
В этой статье вы узнаете, как использовать федеративный поиск в Windows 7, чтобы легко находить прямо в Windows Explorer элементы из различных общедоступных и закрытых источников.
Автор: Ариан Т. Кулп (Arian T. Kulp)
Исходный код: загрузить
Попробуйте прямо сейчас: возможность отсутствует
Сложность: средняя
Необходимое время: 3 часа
Затраты: бесплатно!
ПО: Visual Studio 2008
Введение
В этой статье создается класс, инкапсулирующий провайдер федеративного поиска (federated search). Он позволяет использовать новый механизм федеративного поиска, введенный в Windows 7. Прочитав статью, вы узнаете:
- что такое федеративный поиск;
- как сериализовать класс в XML-объект;
- как создать пример проекта Silverlight, поддерживающего федеративный поиск.
Что такое федеративный поиск
Windows 7 теперь позволяет вести поиск на веб-сайтах из Windows Explorer (Проводника). Этот механизм особо не рекламировался и на деле недоступен разработчикам (насколько мне известно), но полезен всем.
Федеративный поиск Windows 7 основан на спецификации OpenSearch, разработанной Amazon A9. Сам по себе поиск начинается выдачей простого запроса HTTP GET для искомого слова, указанного в URL (https://example?search=TEST). Ответом являются результаты от веб-сайта в формате RSS или ATOM. Любой сайт, поддерживающий поиск, может возвращать результаты в одном из этих форматов. Приложения вроде SharePoint, Exchange Server и даже Sticky Notes поддерживают эту возможность.
OpenSearch уменьшает полосу пропускания, необходимую для передачи типичного ответа на запрос поиска, и позволяет разработчикам создавать интересные приложения с поддержкой результатов такого поиска. Конечно, одно из применений — возможность отображения результатов непосредственно в Windows Explorer с поддержкой сортировки по столбцам, копирования и вставки, а также использования общего поля поиска. Некоторые нестандартные провайдеры поддерживают даже полную интеграцию с оболочкой Windows, в том числе, например, перетаскивание для копирования сущностей или просмотр дополнительных свойств (вспомните Outlook, SharePoint).
Чтобы добавить в Windows провайдер OpenSearch, нужно предоставить файл определения в формате OSDX. Этот формат позволяет указывать описательную информацию наряду с необходимыми URL и другими параметрами.
Созданиефайловопределения OpenSearch
Цель этого проекта — создавать файлы определения OpenSearch, т. е. файлы OSDX. Эти файлы сопоставляются с Windows Explorer и добавляются в папку Searches: C :\ Users \{ USER }\ Searches.
Данный код не выполняет никакого поиска и не интегрируется с Windows; это не прокси, и он не копается в веб-страницах. Фактически он не делает ничего, кроме создания файлов OSDX для добавления в вашу систему.
Чтобы создать файл OSDX, нужно предоставить URL для вызова и имя провайдера. В минимальном виде этот файл выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="https://a9.com/-/spec/opensearch/1.1/">
<ShortName>Bing</ShortName>
<Description>Get Relevant Results & Decide Faster. Bing Gets The Job Done!</Description>
<Url type="application/rss+xml" template="https://www.bing.com/search?q={searchTerms}&go=&form=QBLH&qs=n&format=rss"/>
</OpenSearchDescription>
Найдя нужный URL, используйте "{searchTerms}" для замены искомых слов и их сочетаний. Кроме того, есть escape-выражения для начального индекса ("{startIndex}"), счетчик результатов на каждую страницу ("{count}") и др. Заметьте, что Windows Explorer очень привередлив в использовании файла провайдера. Если в синтаксисе XML допущена хоть малейшая неточность (не забывайте о концевых амперсандах в каждой части URL!) или если вы пропустили Atom или RSS URL, он сообщит о неудаче без всякой полезной информации:
Чтобы упростить формирование таких файлов, я создал класс OpenSearchDefinition с соответствующими свойствами. Этот класс и его свойства помечены XML-атрибутами, поэтому его вывод можно записывать как синтаксически правильный XML без конкатенации строк.
Найти сайты, поддерживающие результаты поиска в виде RSS, весьма нелегко, но, к счастью, есть другой способ — поисковая система Bing, результаты которой можно сузить до контента заданного сайта. В этом случае даже удобнее: вы можете запрашивать результаты поиска в RSS. Google тоже предоставляет RSS-результаты поиска, но требует заблаговременной настройки ваших запросов поиска. А Bing позволяет делать это «на лету», просто указывая параметр для любой операции поиска.
Созданиеклиентскогоинтерфейса
Файл класса OpenSearchDefinition делает всю работу, и его можно использовать повторно, но пока у нет широкого применения. Я создал клиентский интерфейс с применением Silverlight для демонстрации одного из вариантов его использования. На серверной стороне размещается веб-форма ASP.NET, которая обрабатывает файл OSDX на основе параметров в URL. Приложение Silverlight просто предоставляет удобный способ ввода этих параметров.
Первая вкладка предназначена для создания провайдера для любого сайта с применением Bing. Помните, что, если вы указываете область поиска с помощью параметра site, Bing будет возвращать результаты только для одного сайта — в сущности, это поиск уровня сайта.
Вторая вкладка позволяет формировать файл OSDX, используя URL поиска RSS любого сайта. Вы можете ввести любое название, описание и URL поиска. Это лучший способ добавления новых провайдеров поиска.
Хотя с помощью Bing можно вести поиск на большинстве сайтов, вы не сможете воспользоваться преимуществами всех средств, предлагаемых каким-либо сайтом.
Заключение
В настоящее время, похоже, лишь немногие владельцы сайтов заинтересованы в поддержке сводных результатов поиска (syndicated search results). Это может быть связано с тем, что в таком варианте может быть не видна реклама. Но, конечно же, если я выполняю поиск и просматриваю результаты, я скорее всего зайду на сайт и в любом случае увижу всю эту рекламу! Так что, если вы владеете популярным сайтом и поддерживаете поиск (остались ли еще сайты без средств поиска?), подумайте о включении ссылки RSS/ATOM рядом с результатами поиска.
Создать определение провайдера поиска в формате OSDX несложно и вручную, но при этом нужно быть очень внимательным, а моя утилита избавляет вас от случайных ошибок и в качестве бонуса демонстрирует применение технологий Silverlight, XML-сериализации и нескольких других модных средств!
Класс OpenSearchDefinition готов для повторного использования. Как и с любым другим кодом из блога Coding 4 Fun, вы можете делать с ним все, что захотите. Если найдете ему новые применения, дайте мне знать!
Скачайте бесплатную редакцию Visual C# 2008 Express Edition, чтобы поиграть с этим кодом, или загрузите веб-сайт ASP.NET и поэкспериментируйте.
Дополнительная информация
- https://www.neowin.net/news/main/09/01/06/windows-7-federated-search
- https://www.msdev.com/Directory/Description.aspx?EventId=1199
- https://www.sevenforums.com/tutorials/742-windows-7-search-federation-providers.html
Об авторе
Arian Kulp — разработчик ПО, живет в Западном Орегоне. Создает примеры, демо-ролики, лабораторные занятия и пишет статьи, выступает на различных мероприятиях, посвященных вопросам программирования, а также с удовольствием проводит свободное время со своей семьей.