Silverlight专题(13) - 基于Silverlight的Live Search资讯搜索

前言:

最近几天微软Live Search公布了重新架构了的Live Search API(版本为2.0 Beta)

该API律属于微软的最新Live Search Service项目 – Silk Road(丝绸之路)

那么如何在Silverlight中调用Live Search Service呢来进行网页,图片,资讯等的搜索呢?

本篇将带大家走进Silverlight+Live News Search的美妙世界

再阅读本篇文章之前请先阅读上篇文章:Silverlight专题(12) - 基于Silverlight的Live Search网页搜索

解决方案:

UI层与Silverlight专题(12) - 基于Silverlight的Live Search网页搜索的几乎没有任何差异

所以直接列出修改部分代码如下

Code
1 <ListBox x:Name="NewsPanelCtl" Grid.Row="2" Grid.ColumnSpan="2" Margin="2,0" BorderThickness="0" Background="#3c3c3c" Height="500" Visibility="Collapsed">
2     <ListBox.ItemTemplate>
3         <DataTemplate>
4             <StackPanel Width="480">
5                 <HyperlinkButton Content="{Binding Title}" NavigateUri="{Binding OriginalUrl}" TargetName="_blank"/>
6                 <TextBlock Margin="0,2" TextWrapping="Wrap" Text="{Binding Snippet}"/>
7                 <StackPanel Orientation="Horizontal">
8                     <TextBlock Text="{Binding Source}" FontSize="10" Foreground="Green"/>
9                     <Ellipse Fill="Green" Width="3" Height="3" Margin="2"/>
10                     <TextBlock Text="{Binding PublishDate}" FontSize="10"/> 
11                 </StackPanel>
12             </StackPanel>
13         </DataTemplate>
14     </ListBox.ItemTemplate>
15 </ListBox>

底层的代码调用如下:

Code
1 private void SearchBtnCtl_Click(object sender, RoutedEventArgs e)
2 {
3     this.SearchBtnCtl.IsEnabled = false;
4     LiveSearchPortTypeClient liveSearchClient = new LiveSearchPortTypeClient();
5     SearchRequest webRequest = new SearchRequest();
6     webRequest.AppId = "44980C5CFA65792B3CDFF33A5CBF2CFAD17E3349";
7     webRequest.Market = "zh-CN";
8     webRequest.Version = "2.0";
9     webRequest.Sources = new SourceType[] { SourceType.News};
10     webRequest.Query = this.KeywordsCtl.Text.Trim();
11     webRequest.Options = new SearchOption[] { SearchOption.EnableHighlighting };
12 
13     liveSearchClient.SearchAsync(webRequest);
14     liveSearchClient.SearchCompleted += new EventHandler<SearchCompletedEventArgs>(liveSearchClient_SearchCompleted);
15 }
16 
17 void liveSearchClient_SearchCompleted(object sender, SearchCompletedEventArgs e)
18 {
19     SearchResponse liveSearchResponse = e.Result;
20 
21     //News Search
22     NewsResponse newsResponse = liveSearchResponse.News;
23     this.WebNumCtl.Text = String.Format("共{0}条搜索结果", newsResponse.Total);
24     List<NewsInfo> m_newsList = new List<NewsInfo>();
25     if (newsResponse.Results.Length > 0)
26     {
27         foreach(NewsResult newsResult in newsResponse.Results)
28         {
29             NewsInfo newsInfo = new NewsInfo();
30             newsInfo.Title = newsResult.Title;
31             newsInfo.Source = newsResult.Source;
32             newsInfo.Snippet = newsResult.Snippet;
33             newsInfo.PublishDate = newsResult.Date;
34             newsInfo.OriginalUrl = newsResult.Url;
35             m_newsList.Add(newsInfo);
36         }
37 
38         this.NewsPanelCtl.ItemsSource= m_newsList;
39     }
40 
41     this.NewsPanelCtl.Visibility = Visibility.Visible;
42     this.SearchBtnCtl.IsEnabled = true;
43 }

其中还可在12行添加如下代码:

webRequest.News = new NewsRequest();
webRequest.News.Category = "rt_Business";
webRequest.News.SortBy = NewsSortOption.Date;
webRequest.News.SortBySpecified = true;

其中Category用来限制搜索的新闻类别

目前含有的类别有

  • rt_Business(商业新闻)
  • rt_Entertainment(娱乐新闻)
  • rt_Health(健康新闻)
  • rt_Political(政治新闻)
  • rt_Scientific(科学新闻)
  • rt_Sports(体育新闻)
  • rt_US(美国国内新闻)
  • rt_World(世界新闻)
  • rt_Local(本地新闻)
  • rt_ScienceAndTechnology(科技新闻)
  • 而SortBy用来设置发送到客户端的新闻以什么样的排序来发送(默认情况下是以最相关排序发送的)

    Silverlight专题(13) - 基于Silverlight的Live Search资讯搜索_第1张图片

    其外还有LocationOverride属性,用来做新闻位置过滤,不过目前只有美国的地址才可用

    而Offset是一个非常有用的属性,你可以依靠这个属性实现Live Search的分页浏览

    (顾名思义,Offset就是用来表示目前想要获得的新闻位置和初始化的第一条新闻的位置之间的差距

    比如,你点击第二页时,事实上Live Search将Offset设置成了10,就可以得到第11~20条新闻了)

    NewsInfo的类定义如下:

    Code
    1 public class NewsInfo
    2 {
    3     public string Title { get; set; }
    4     public string Snippet { get; set; }
    5     public string PublishDate { get; set; }
    6     public string Source { get; set; }
    7     public string OriginalUrl { get; set; }
    8 }

    结果展示:

    展示程序如下(部署在了http://Streaming.live.com)

    与Live Search搜索结果比较:

    Silverlight专题(13) - 基于Silverlight的Live Search资讯搜索_第2张图片 Silverlight专题(13) - 基于Silverlight的Live Search资讯搜索_第3张图片

    代码下载:

    你可能感兴趣的:(Silverlight专题(13) - 基于Silverlight的Live Search资讯搜索)