在windows mobile上必硬(bing)

來源:互聯網
上載者:User

在windows mobile上必硬(bing)

Freesc Huang

http://fox23.cnblogs.com

摘要:前一陣子,bing一直是很火的話題, 其市場佔有率最高日一度超過18%,不僅因為微軟強大的宣傳攻勢,也有"AV門"("必硬"的由來???)等因素的影響. 儘管對其搜尋品質褒貶不一, bing提供的門類越發豐富的bing API還是值得期待的。如果你對bing API還沒有概念,建議先閱讀馬寧童鞋的此文。本文將示範如何在行動裝置使用bing API 2.x打造一個簡易的新聞搜尋。

一. bing的移動版本

 bing的移動版本已經上線。 你可以在手機瀏覽器地址欄輸入m.bing.com訪問其web版本:

 

 

你也可以下載bing for windows mobile用戶端,通過http://mobile.search.live.com/client/download_manual.aspx

 其效果如所示:

 

不過目前大多數服務只在美國,英國,日本等處開放,中文版本的還需等待。

 

二. 在Windows Mobile 應用中使用bing API

      在一切開始之前,首先你得去申請一個AppID(http://www.bing.com/developers/createapp.aspx),並妥善儲存。bing目前已經提供了眾多門類的API服務(SourceTypes),包括網頁,廣告,圖片,視頻,新聞,電話薄,翻譯,拼字檢查等等。每一個門類都是一個相對獨立的垂直搜尋。你可以在應用程式中利用這些SourceTypes中的一個或者一些來構造一個自訂的搜尋相關應用。

      這裡我希望編寫一個簡單的新聞搜尋,其準系統如下:

      1.每次返回查詢的前10條記錄

      2.給出相關搜尋

      3.可以查看搜尋結果的發布時間和新聞選段等資訊。

其介面主要由一個搜尋方塊(tbSearchString),一個用來顯示相關查詢的ComboBox(cbRelated),一個用來顯示結果的ListView(lvResult)和兩個Softkey Button組成,:

ok, 接下來我們先添加一個對bing Web Service的引用, 服務URL為:http://api.search.live.net/search.wsdl

 

在Search按鈕按下時,執行以下代碼:

            //清理listview和combBox
        listView1.Items.Clear();
            listView1.Tag = null;
            cbRelated.Items.Clear();

            using (LiveSearchService service = new LiveSearchService())
            {
            //BuildRequest用來配置我們的查詢請求.別急,馬上會提到
                    SearchRequest request = BuildRequest();
                    SearchResponse response = service.Search(request);

                //DisplayResponse用來組織顯示查詢結果
                    DisplayResponse(response);
        }

 

BuildRequest定義如下:

BuildRequest
       private SearchRequest BuildRequest()
        {
            SearchRequest searchReq = new SearchRequest();
        
            //注意這裡AppId請自行修改
            searchReq.AppId = Properties.Resources.AppId;
            searchReq.Query = tbSearchString.Text;

            //sourcetype 決定了本次查詢的類型
            searchReq.Sources = new SourceType[] { SourceType.News, SourceType.RelatedSearch };
            searchReq.Market = "en-US";
        
            //配置新聞的數目,排序方式等
            searchReq.News = new NewsRequest();
            searchReq.News.Count = 10;
            searchReq.News.CountSpecified = true;
            searchReq.News.SortBy = NewsSortOption.Relevance;
            searchReq.News.SortBySpecified = true;

            return searchReq;
        }

 

接下來,為了方便安全地按照我們的需要儲存查詢結果,我們添加一個類MyNewsResult:

   public class MyNewsResult
    {
       public string Date { get; set; }//日期
       public string Title { get; set; }//標題
       public string Snippet { get; set; }//新聞選段   
    }

 

 然後,我們來關注一下DisplayResponse函數:

DisplayResponse
       private void DisplayResponse(SearchResponse response)
        {
            if (response.News != null &&
                response.News.Results != null &&
                response.News.Results.Length > 0)
            {
        //提取我們需要的資訊,以MyNewsResult的形式存放每條結果
                var results = from bingResults in response.News.Results
                              select new MyNewsResult() { Date = bingResults.Date, 
                                  Title = bingResults.Title, 
                                  Snippet = bingResults.Snippet };
        
        //將結果儲存到listview的tag中以便繼續使用
                lvResult.Tag = results.ToArray();
        
        //將相關新聞查詢儲存至ComboBox
                if (response.News.RelatedSearches != null && 
                    response.News.RelatedSearches.Length > 0)
                {
                    foreach (var rs in response.News.RelatedSearches)
                    {
                        cbRelated.Items.Add(rs.Title);
                    }
                }
        //將我們需要的結果標題添加到ListView
                foreach (var r in (MyNewsResult[])lvResult.Tag)
                {
                    lvResult.Items.Add(new ListViewItem(r.Title.ToString()));
                }
            }
        }

 

最後,我希望在選中listView中的某一項的時候能夠顯示該新聞的日期和新聞選段。於是在lvResult的ItemActivate事件處理函數中我們添加如下代碼: 

            MyNewsResult[] nr = (MyNewsResult[])lvResult.Tag;
            if (nr != null)
            {
                MessageBox.Show(nr[lvResult.SelectedIndices[0]].Snippet, 
                    nr[lvResult.SelectedIndices[0]].Date);
            }

 

到此,主要的工作我們已經完成了(完整的代碼文章末尾有下載)。不妨來看看運行效果:

相關搜尋:

完整的代碼 點擊此處下載

最後出個練習題給有興趣的朋友:

如何利用bing打造一個基於GPS的垂直搜尋?

(提示1:SearchRequest有經緯度屬性)

(提示2:可以參考bing map sdk http://msdn.microsoft.com/en-us/library/dd877180.aspx)

(提示3:我沒有現成的代碼,要靠各位自己)

去試試吧;-)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.