Создаем Federated Search Connector на .Net

Автор: Topol Суббота, Май 5th, 2012 Нет комментариев

Рубрика: Операционные системы

Windows 7 в значительной степени упрощает поиск в сети благодаря технологии Federated Search. В этой статье я расскажу о том, как создать поисковый провайдер с помощью .Net  на примере Flickr. 

Вместо вступления
В нашем примере используется Flickr API через Flickr.Net. Для того, чтобы самостоятельно создать поисковый провайдер для Flickr:

Создаем новое веб-приложение на ASP .Net
Начнем мы с того, что создадим новое веб-приложение ASP.Net  в Visual Studio:

Затем добавляем проект Flickr.Net (называется FlickrNet.csproj) и добавляем ссылку на него из вашего веб-приложения.

Теперь добавляем ранее полученные ключи для Flickr API и секретные ключи в ваш Web.config в разделе AppSettings:

Код:
<appSettings>
<add key=»flickr_api_key» value=»923422ab4225345dfgdb777daf46″/>
<add key=»flickr_secret» value=»aa8b23fsdfhyc3beda»/>
</appSettings>

Создаем Flickr Search Provider
Наш провайдер обрабатывается клиентом Windows Explorer с помощью HTTP GET, поэтому он должен получить от него несколько параметров:

Код:
[i]http://localhost:52903/Search.aspx?q=TechEdIsrael2008&start=1&count=20[/i]

Поиск будет осуществлен по сайту Flickr, а ответ придет в виде RSS:

Код:
<rss version=»2.0″ xmlns:media=»http://search.yahoo.com/mrss/»>
<channel>
<title>Flickr Search Results</title>
<item>
<title>IMG_0134c</title>
<link>http://farm4.static.flickr.com/3100/2682983091_7cea404dc4_m.jpg</link>
<description>show shadow dance techedisrael2008</description>
<pubDate>Sun, 20 Jul 2008 01:47:25 GMT</pubDate>
<media:content url=»http://farm4.static.flickr.com/3100/2682983091_7cea404dc4_b.jpg»
type=»image/jpeg» height=»333″ width=»500″ />
<media:thumbnail url=»http://farm4.static.flickr.com/3100/2_7cea404dc4_t.jpg» />
</item>
<item>

</item>
</channel>
</rss>

Теперь необходимо создать новую веб-форму под названием Search.aspx.

Чтобы того, чтобы упростить проверку получения ответа, щелкните правой кнопкой мыши по веб-приложению и откройте окно свойств. Перейдите на вкладку Web, выберите Search.aspx в качестве стартовой страницы и введите параметры запроса:

В разметке страницы добавьте новый элемент asp:Repeater, который позволит определить шаблон для каждого элемента ответа:

Код:
<asp:Repeater runat=»server» ID=»itemsRepeater»>
</asp:Repeater>

В нижерасположенном коде нужно реализовать логику, использующую Flickr.Net для поиска фотографий и связки результатов с контролом Repeater:

Код:
protected void Page_Load(object sender, EventArgs e)
{
string flickrApiKey = WebConfigurationManager.AppSettings["flickr_api_key"];
string flickrSecret = WebConfigurationManager.AppSettings["flickr_secret"];
string searchTerm = Request.QueryString["q"];
int startPage = int.Parse(Request.QueryString["start"]);
int count = int.Parse(Request.QueryString["count"]);
Flickr flickr = new Flickr();
flickr.ApiKey = flickrApiKey;
flickr.ApiSecret = flickrSecret;
Photos photos = flickr.PhotosSearch(null, «», 0, searchTerm,
DateTime.MinValue, DateTime.MinValue, 0,
count, startPage, PhotoSearchExtras.All);
this.itemsRepeater.DataSource = photos.PhotoCollection;
this.itemsRepeater.DataBind();
}

В приведенном выше коде я сначала получил ключи для API и секретный ключ из файла конфигурации, а затем извлек параметры из строки запроса. Затем я создал новый экземпляр объекта Flickr и осуществил фактический поиск фотографий, предоставляя номер страницы и число элементов на каждой странице. И в конце я связал возвращенное изображение из коллекцию к repeater-контролу.

Заменим HTML-заголовок и подвал на соответствующие RSS-заголовок и подвал в Search.aspx.

До:

Код:
<%@ Page Language=»C#» AutoEventWireup=»true» CodeBehind=»Search.aspx.cs» Inherits=»FlickrFederatedSearch.Search» %>
<head runat=»server»>
<title></title>
</head>
<body>
<form id=»form1″ runat=»server»>
<div>
<asp:Repeater runat=»server» ID=»itemsRepeater»>
</asp:Repeater>
</div>
</form>
</body>
</html>

После:

Код:
<%@ Page Language=»C#» AutoEventWireup=»true» CodeBehind=»Search.aspx.cs» Inherits=»FlickrFederatedSearch.Search» %>
<rss version=»2.0″ xmlns:media=»http://search.yahoo.com/mrss/»>
<channel>
<title>Flickr Search Results</title>
<asp:Repeater runat=»server» ID=»itemsRepeater»>
</asp:Repeater>
</channel>
</rss>

Наконец, настроим ItemTemplate из Repeater на отображение фотографий в соответствии с форматом вывода:

Код:
<asp:Repeater runat=»server» ID=»itemsRepeater»>
<ItemTemplate>
<item>
<title><%# Eval(«Title») %></title>
<link><%# Eval(«SmallUrl»)%></link>
<description><%# Eval(«CleanTags»)%></description>
<pubDate>
<asp:Literal runat=»server»
text=’<%# ((FlickrNet.Photo)Container.DataItem).DateTaken.ToString(«R») %>’ />
</pubDate>
<media:content url=’<%# Eval(«LargeUrl»)%>’ type=»image/jpeg» />
<media:thumbnail url=’<%# Eval(«ThumbnailUrl»)%>’ />
</item>
</ItemTemplate>
</asp:Repeater>

Запускаем приложение. Браузер должен перейти к Search.aspx, передав все соответствующие параметры запроса. Ответ должен быть в виде RSS-потока, в котором будут содержаться найденные изображения.

Создаем Flickr Federated Search Connector
Добавляем новый XML-файл под названием FlickrFederatedSearch.osdx (абб. от OpenSearch Description XML) в проект. Этот файл содержит данные, которые необходимы Windows Explorer для осуществления поиска с помощью поисковой службы.

Код:
<?xml version=»1.0″ encoding=»utf-8″ ?>
<OpenSearchDescription xmlns=»http://a9.com/-/spec/opensearch/1.1/»>
<ShortName>Flickr Federated Search</ShortName>
<Url type=»application/rss+xml»
template=»http://…/Search.aspx?q={searchTerms}&amp;start={startPage}
&amp;count={count}» />
</OpenSearchDescription>

Обратите внимание, что в вышеприведенном фрагменте XML параметры берутся из некоторых предопределенных имен (SearchTerms (), (COUNT) и т.д.), а символы & закодированы с помощью Html.

Щелкаем правой кнопкой мыши по файлу .osdx и выбираем «Open with»:

В диалоговом окне выбираем Windows Explorer:

В появившемся диалоге Add Search Connector выбираем Add:

Теперь в разделе «Избранное» проводника Windows 7 появился поисковый провайдер для Flickr, который можно использовать для поиска изображений на одноименном сайте.

В заключение
В этой статье я рассказал о том, как создать поисковый провайдер для Flickr с помощью .Net. Созданный нами провайдер обеспечивает лишь основные функции и при необходимости его можно сделать более функциональным, используя руководство по созданию поисковых провайдеров для Windows 7.

Источник: thevista.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты