11.11.2009 13:04 | houseboy

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.


Источник: http://blogs.msdn.com/bursteg
Перевод: houseboy

Комментарии

Комментариев нет...
Для возможности комментировать войдите в 1 клик через

По теме

Акции MSFT
178.59 0.00
Акции торгуются с 17:30 до 00:00 по Москве
Мы на Facebook
Мы ВКонтакте
В сервисе IPANN.NET купить прокси для SEO и SMM
Все права принадлежат © MSInsider.ru (ex TheVista.ru), 2019
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 2.516 секунд (Общее время SQL: 0.934 секунд - SQL запросов: 32 - Среднее время SQL: 0.0292 секунд))