顯示具有 Sitemaps 標籤的文章。 顯示所有文章
顯示具有 Sitemaps 標籤的文章。 顯示所有文章

2009年4月14日 星期二

介紹 ASP.NET Application Services 1-2

RunPC165期:領先體驗微軟ASP.NET的「未來之路」(2)哇~原來搜尋引擎可以這麼親近我的站台

為自已的網站加入搜尋功能
學會利用ASP.NET Futures產生Sitemaps與將其提交至各搜尋引擎,這僅是讓搜尋引擎易於將我們的網站進行收錄與建立索引,如此一來卻僅僅對來自於搜尋引擎的訪客有用,如果要站內的搜索也透過網路搜索引擎(如:Google、Yahoo、MSN)來實現,以避免自己再開發站內的搜索引擎呢?早期是透過各搜尋引擎所提供搜尋方塊框的HTML直接嵌入網站的網頁內,請參考程式碼4,除提供搜尋引擎的搜尋功能外,亦可針對站內內容進行搜尋,各搜尋引擎的搜尋方塊框資訊,此方式在客製化上功能上較為簡略;後各搜尋引擎也可提供Search API,讓我們網站或程式透過呼叫Search API的方式完成搜尋功能;而ASP.NET Futures 本身已內鍵Windows Live Search的provider,只要透過簡單的配置檔設定、SearchDataSource控制項與簡易的程式即可完成站內搜尋功能,當然這種方式版面的配置會比採用搜尋方塊框的方式主控權會來得好許多。當然除了使用內鍵的WindowsLiveSearchProvider提供的功能,我也可以依WindowsLiveSearchProvider繼承SearchProviderBase 實做出自己延伸類別,如官方網站Enabling Search頁面上,提供自訂Yahoo和Index Server兩個自定義的provider,亦可依照此法實作出Google自定義的provider。當然你亦可以整合多家搜尋引擎搜尋回來的結果加以比對分析組合,產生真正符合你需求的搜尋功能。

程式4: Google、Yahoo、百度的搜尋方塊HTML


Windows Live站內搜尋實作
首先請至http://search.msn.com/developer申請取得一個appID;接著修改配置檔於< microsoft.web.preview>內加入< search enabled="true">< providers>< add name="WindowsLiveSearchProvider" type="Microsoft.Web.Preview.Search.WindowsLiveSearchProvider, Microsoft.Web.Preview" appID="MyAppID" siteDomainName="MySiteDomainName"/>< /providers>< /search>打開搜尋功能,加入Windows Live Search的Provider,其中MyAppID填入你申請的appID,而MySiteDomainName請填入你的網域名稱(筆者設定為asp.net)。最後新增一個aspx網頁,從工具箱中拖曵出一個TextBox當關鍵字欄位、一Button當觸發搜尋用,該Button_Click事件內輸入Me.SearchDataSource1.DataBind()、一GridView當呈現搜尋結果用、一SearchDataSource搜尋資料來源控制項,它與一般的資料來源控制項(如:ObjectDataSource、SqlDataSource)一樣,都可以繫結至DataList、GridView、Repeater等控制項,本範例繫結至GridView控制項,而且可以自動提供要呈現的資料,且因為繫結至此控制項的結果屬於SearchResult型別,它包含Title、URL和Description等屬性,實作程式碼如程式5所示,而執行後輸入關鍵字AJAX按下搜尋鈕,可搜尋asp.net站內AJAX的結果如圖七所示。

程式5: 搜尋頁面程式碼



圖七 實作Windows Live搜尋站台結果。


總結
本期筆者為各位介紹ASP.NET Futures內提供Application Services其中二項與搜尋引擎相關的服務與實作方式,Search Sitemaps可以幫助搜尋引擎更容易收錄站台,它提供以設定配置檔的方式來使用此服務,動態產生出站台的導航資訊檔,和動態從資料來源建立的Sitemaps方式,最後提交至各搜尋引擎,使搜尋引擎能探索遍我們整個站台,唯此僅對來自於搜索引擎的訪客有用,若希望也透過網路搜尋引擎來現實站內搜尋,則可借由Search Application Services內鍵的WindowsLiveSearchProvider或繼承SearchProviderBase 實做出自己延伸類別,將搜尋引擎整個嵌入我們的站台,完成站台的搜尋功能,使搜尋引擎不僅可索遍整個站台更進一步嵌入我們的站台。

參考資源

ASP.NET Futures快速教學網:http://quickstarts.asp.net/Futures/
ASP.NET Futures官方論壇網:http://forums.asp.net/1127.aspx
SiteMap官方網站:http://www.sitemaps.org

2009年4月4日 星期六

介紹 ASP.NET Application Services 1-1

RunPC165期:領先體驗微軟ASP.NET的「未來之路」(2)哇~原來搜尋引擎可以這麼親近我的站台


繼領先體驗微軟ASP.NET的「未來之路」第一篇介紹動態資料控制項(Dynamic Data Control;DDC)後,本期將為各位介紹透過ASP.NET Application Services拉近各搜尋引擎與我們網站間的距離,不僅表面拉近更要深入探索,使各搜尋引擎對我們網站瞭若指掌。或許各位正納悶著,這對我們的網站有什麼好處呢?現今全球企業、商家上網規模已有數百萬個網站,而且成長的速度是以每星期3000多個網站在增加,若你的網站未被搜尋引擎收錄,那你的網站就像是開在荒島的LV旗艦店,即使你有在好的產品,也難以銷售。讓搜尋引擎為你建立一條康莊大道(索引)指引你潛在的客戶來到你的網站認識你的公司、產品進而完成採購的動作,是現今網路行銷的一門顯學課程。

不教生不教死
台灣俗語有句話如此說:「教生教死,沒人教你做生意。」,這是筆者二年多前,在與某位資訊相關協會理事長聊天時,他對筆者說的一句話。當時許多網路公司業務僅著重在接網頁設計或架設網站的案子,卻忽略網路行銷這塊大餅,或將網路行銷與垃圾郵件行銷畫上等號。雖該理事長所成立的公司有開設相關課程,但卻對這關鍵點輕言帶過,因為「教生教死,沒人教你做生意。」;筆者不具教生教死的功夫,也沒教你做生意的本事,但卻可借由介紹微軟ASP.NET Application Services提供的技術,使各位對網站行銷的作法其一有基本的體驗與了解,更進一步了解到微軟對於此處的著墨。

微軟ASP.NET Application Services的簡介
它是微軟提供的一組全新的應用程式服務,包含下列三種應用程式服務:

 Search Sitemaps:它是ASP.NET Futures為幫助搜尋引擎更容易收錄站台的一個方式,可借由設定配置檔的方式來使用此服務,動態產生出站台的導航資訊檔,通知搜尋引擎,關於您網站中有哪些可供檢索的網頁,它是一份專為站台導航的特殊標準XML檔案。
 Search:能夠透過一組商業級的搜尋引擎API(Google、Live Search)或自訂的搜尋提供者,讓開發人員可以為自己的ASP.NET應用程式加入搜尋服務。
 Diagnostics:它可以補捉瀏灠器中JavaScript錯誤以及將它們回報給伺服器端ASP.NET網路服務程式碼,使其將客戶端的例外完整記錄於錯誤事件記錄或資料庫中,以利事後分析與偵錯,唯本篇將重心放於與搜尋引擎相關的部分,故此服務詳細介紹請參考相關資料。


在開始討論ASP.NET Application Services的Search Sitemaps前,我們先說明何為Sitemaps?

什麼是 Sitemaps?
二年多前由Google提出的Sitemaps格式在2006年11月15日被Yahoo!與Microsoft正式宣告支援採用,成為三大搜尋引擎的統一搜尋指引標準,在今年紐約的搜尋引擎大會中Ask.com也宣布加入這個標準協定,其這些目的是為了讓各搜尋引擎可以更容易且更精確的找到所要的網站,它是利用web crawl(網路搜尋)、Web Spider(網路蜘蛛),篩選出更符合使用者所需的搜尋結果,故網站管理者將可利用更簡單、整合性的方式提供內容及詮釋資料給搜尋引擎,對搜尋引擎而言,對比起從首頁進入尋找,Sitemaps可以讓搜尋引擎更有效簡易的紀錄、更新、收錄網站的頁面。雖然如此,但目前還沒有一個搜尋引擎準備放棄從首頁進行搜尋紀錄網頁的行為,Sitemaps的角色是可以輔助讓搜尋更有效率。
Sitemaps其實有點類似RSS或者Atom,只不過它不像RSS或Atom描述的是最近的更新內容,而是整個網站的地圖,主要用來描述網站URL及與各URL相關的其他中繼資料(上次更新日期、變更頻率,以及相對於網站中其他URL的重要性),可讓網站管理員易於通知搜尋引擎關於網站中有哪些可供檢索的網頁,使搜尋引擎能夠更有效地檢索該網站。但使用Sitemaps 通訊協定並不保證網頁會出現在搜尋引擎中,但它能夠協助網頁檢索器更完整地檢索您的網站。搜索引擎如Google是支援Sitemaps的,通過Google Webmaster Tools(以前叫做Google Sitemaps)你可以提交你的網站的Sitemaps,以便Google更好地索引你的網站。

Sitemaps XML格式
Sitemaps 通訊協定格式是一份專為站台導航的特殊XML標記所組成的檔案。檔案本身亦必須使用UTF-8編碼,且所有資料值都必須是實體逸出(註1),它必須,如程式碼1:

 以< urlset>標記做為起始開頭,並以< /urlset>標記做為結束結尾。
 指定< urlset>內的名稱領域(通訊協定標準),即http://www.sitemaps.org/schemas/sitemap/0.9。
 讓每個 URL 中包含一個< url> 項目做為母層 XML 標記。
 在每個 < url> 母層標記包含一個 < loc> 子層項目,為網頁的URL。

註1:如同所有的 XML 檔案一樣,下表所列字元的任何資料值 (包括 URL),都必須使用實體逸出碼。

實體逸出碼


程式1:XML Sitemaps格式範例


而< lastmod>、< changefreq>、< priority>標記為選擇性標記,其中< lastmod>為檔案的最後修改日期,採用W3C日期時間格式,可省略時間的部份;< changefreq>為網頁可能變更的頻率,分為always、hourly、daily、weekly、monthly、yearly、never七種頻率模式;< priority>為此URL的優先順序,只是相對於您網站上的其他 URL,其有效值的範圍為0.0~1.0,預設為0.5。
至此我們已了解何為Sitemaps與Sitemaps的格式,接下來讓我們來看一下ASP.NET Futures的作法。

ASP.NET Futures產生Sitemaps的作法
在ASP.NET Futures之前,如果要為所屬的ASP.NET網站增加Sitemaps,除第三方提供的工具外,一般有二種較常見的實作方法,一種是讀取Web.sitemap來產生Sitemaps檔案,另一種是借由讀取網站整個目錄檔案來產生Sitemaps檔案,筆者早期採用後者的方式,建立站台的Sitemaps。
而ASP.NET Futures也提供二種方式,其一是借由AspNetSiteMapSearchSiteMapProvider類別直接在配置檔內指定即可依Web.sitemap來產生Sitemaps,另一是借由繼承DynamicDataSearchSiteMapProvider類別覆寫DataQuery方法來動態產生我們要的Sitemaps,此二者類別皆是繼承自Microsoft.Web.Preview.Search.SearchSiteMapProviderBase基底型別。接下來讓我們看一下如何實作,首先,你還是需要有ASP.NET Futures開發環境(建置方式請參考RunPC 165期P205)後,新增一個網站,新網站範本如圖一請選擇建立ASP.NET Futures AJAX Web Site範本,該範本會自動加入Microsoft.Web.Preview.dll參考,如圖二所示,因為第一種實作方式是要借由AspNetSiteMapSearchSiteMapProvider類別來讀取Web.sitemap檔案來產生Sitemaps,所以接著在專案中加入網站的Web.sitemap檔案,緊接著於Web.config配置檔內加入程式2指定使用到的Provider與Provider名稱(FromWebsitemap)和它的Handler,即可透過http://xx.xx.xx/xx/SearchSiteMaps.axd?sitemap=FromWebsitemap,讀取我們網站的Web.sitemap來產生該網站Sitemaps,結果如圖三所示;眼尖的讀者可能發現到Sitemaps協議中標記為選擇性標記的< changefreq>、< priority>這二者都未出現,而< lastmod>僅出現在第一個節點是因為< lastmod>與< url>皆可自動產生,唯需有對應至該專案網頁才可自動取出最後修改日,此範例僅有Default.aspx網頁,故僅有此節點有最後修改時間,而此三者可於Web.sitemap檔中的siteMapNode中加入lastModified、changeFrequency、priority屬性(Attribute)即可產生對應的標記節點,如圖四所示。


圖一 建立ASP.NET Futures AJAX Web Site專案。


圖二 自動加入Microsoft.Web.Preview.dll參考。


程式2:專案配置檔


圖三 AspNetSiteMapSearchSiteMapProvider類別產生Sitemaps結果。


圖四 指定屬性(Attribute)產生對應的標記節點Sitemaps。


了解借由AspNetSiteMapSearchSiteMapProvider類別來讀取Web.sitemap檔案來產生Sitemaps方式後,接著讓我們來看如何借由繼承DynamicDataSearchSiteMapProvider類別與覆寫DataQuery方法來動態產生我們要的Sitemaps,首先於專案總管上選擇專案加入[App_Code]的ASP.NET資料夾,於該資料夾內加入一類別檔SupplierSiteMapData,程式碼內容如程式3所示,SupplierSiteMapData類別是繼承DynamicDataSearchSiteMapProvider,再覆寫DataQuery方法,該方法以迴圈方式動態產生十筆供應商資料,實際可能連結至資料庫取回要傳回的資料,當然也可以透過LINQ來篩選資料,該方法傳回型態為IEnumerable;接著進行配置檔的設定,於< providers>內加入
< add name="Supplier" type="SupplierSiteMapData, App_Code" targetUrl="Supplier.aspx" />
修改圖三的FromWebsitemap為Supplier,瀏灠結果為圖五,出現十筆供應商資料的Sitemaps,而下表一為各對應的屬性(Attribute)與說明;於< providers>內加入
< add name="Supplier2" type="SupplierSiteMapData, App_Code" targetUrl="Supplier.aspx" queryStringDataFormatString="SName={0}&SID={1}"
queryStringDataFields="SupplierName,SupplierID" />
修改圖三的FromWebsitemap為Supplier2,瀏灠結果為圖六所示,網頁參數的格式改變。

程式3:SupplierSiteMapData類別程式


圖五 十筆供應商資料的Sitemaps結果圖。


表一 自訂產生Sitemaps屬性表


圖六 網頁參數的格式改變結果。

學會利用ASP.NET Futures產生Sitemaps的作法後,接著讀者可將產生的Sitemaps透過Google Webmaster Tools(https://www.google.com/webmasters/sitemaps)提交至Google、亦可以透過Yahoo的Site Explorer(https://siteexplorer.search.yahoo.com/)提交至Yahoo,而MSN只能透過MSN Submit URL (http://search.msn.com/docs/submit.aspx)提交URL至MSN。
加入書籤: MyShare HemiDemi Baidu Google Bookmarks Yahoo! My Web PChome Del.icio.us Digg technorati furludn bookmark 其他更多書籤

BOOKS:New and Upcoming