博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SharePoint2010联合搜索——Google、百度
阅读量:4511 次
发布时间:2019-06-08

本文共 8726 字,大约阅读时间需要 29 分钟。

以下图是效果图:右边添加两个Web联合结果部件,分别连接百度和Google搜索。

OpenSearchBase类----抽象类父类 

public abstract class OpenSearchBase : LayoutsPageBase    {        //搜索单词参数         public string SearchTerm        {            get            {                //根据网站的编码不同而获取的也不同                if (Request.Cookies.Get("encoding").Value == "gb2312")                {                    string query = Page.Request["q"];                    query = UrlEncode(query);                    return query;                }                else                {                    return Page.Request["q"];                }            }        }        //Url转码        public static string UrlEncode(string input)        {            if (input == null || "".Equals(input)) return "";            StringBuilder sb = new StringBuilder();            byte[] byStr = System.Text.Encoding.Default.GetBytes(input);            for (int i = 0; i < byStr.Length; i++)            {                sb.Append(@"%" + Convert.ToString(byStr[i], 16));            }            return (sb.ToString());        }        //显示搜索条数参数        public int Count        {            get            {                return Convert.ToInt32(Page.Request["count"]);            }        }        //获取搜索结果列表XML格式        public string GetResultsXML(string searchURL, string searchTerm, string selectNodes)        {            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(searchURL);            CookieContainer cookie = new CookieContainer();            request.CookieContainer = cookie;            WebResponse response = request.GetResponse();            HtmlDocument doc = new HtmlDocument();            try            {                if (response.ContentType == null || response.ContentType.ToLower().Contains("utf-8") || response.ContentType.ToLower().Contains("big5"))                {                    //Google                    HtmlWeb hw = new HtmlWeb();                    doc = hw.Load(searchURL);                }                else if (response.ContentType.ToLower().Contains("gb2312") || response.ContentType.ToLower().Contains("gbk"))                {                    //Baidu                    request.Method = "GET";                    Stream rss = response.GetResponseStream();                    doc.Load(rss);                }                //Begin writing the RSS document                StringBuilder resultsXML = new StringBuilder();                resultsXML.Append("
"); resultsXML.Append("
"); resultsXML.AppendFormat("
60
", searchTerm); HtmlNodeCollection nodeCollection = doc.DocumentNode.SelectNodes(selectNodes); foreach (HtmlNode htmlNode in nodeCollection) { string link = ""; string title = ""; string desc = ""; StringWriter descWriter = new StringWriter(); StringWriter titleWriter = new StringWriter(); StringWriter linkWriter = new StringWriter(); foreach (HtmlNode subNode in htmlNode.ChildNodes) { //在XML内容中找到标题(title),URL地址(link),描述(desc)和节点(subNode) string[] ltd = FindResultItems(link, title, desc, subNode); link = ltd[0]; title = ltd[1]; desc = ltd[2]; } Server.HtmlEncode(desc, descWriter); string encDescription = descWriter.ToString(); if (encDescription == "") { encDescription = "不能正常显示信息,如图片等"; } Server.HtmlEncode(title, titleWriter); string encTitle = titleWriter.ToString(); Server.HtmlEncode(link, linkWriter); string encLink = linkWriter.ToString(); resultsXML.AppendFormat("
{0}
{1}
{2}
2010-10-10
", encTitle, encLink, encDescription); } //Complete RSS document resultsXML.Append("
"); return resultsXML.ToString(); } catch (Exception ex1) { StringBuilder errorXML = new StringBuilder(); errorXML.Append("
"); errorXML.Append("
"); //errorXML.Append("
没有合适的结果
"); errorXML.Append("
错误信息
"); errorXML.AppendFormat("
错误信息
{0}
", ex1.ToString()); errorXML.Append("
"); return errorXML.ToString(); } finally { response.Close(); } } //在XML内容中找到标题(title),URL地址(link),描述(desc)和节点(subNode) public abstract string[] FindResultItems(string link, string title, string desc, HtmlNode subNode); }

百度BaiduSearch类

public partial class BaiduSearch : OpenSearchBase    {        protected override void Render(HtmlTextWriter writer)        {            //创建Cookie,因百度网站的编码是GB2312,设Cookie为gb2312            HttpCookie cookie = new HttpCookie("encoding", "gb2312");            Request.Cookies.Add(cookie);            //获取搜索词            string searchTerm = base.SearchTerm;            if (string.IsNullOrEmpty(searchTerm)) return;            //获取搜索个数            int count = base.Count;            //构建URL地址            string searchURL = string.Format("http://www.baidu.com/s?wd={0}&rn={1}", searchTerm, count);            Response.ContentType = "text/xml";            //用HTMLTextWriter对象写出RSS文档            writer.Write(base.GetResultsXML(searchURL, searchTerm, "//td[@class='f']"));        }        //重写FindResultItems方法        public override string[] FindResultItems(string link, string title, string desc, HtmlNode subNode)        {            string[] ltd = new string[3];            ltd[0] = link;            ltd[1] = title;            ltd[2] = desc;            if (subNode.Name == "a")            {                ltd[0] = subNode.Attributes["href"].Value;                ltd[1] = subNode.InnerText.ToString();            }            if (subNode.Name == "font")            {                string descHtml = subNode.InnerHtml;                try                {                    ltd[2] = descHtml.Substring(0, descHtml.IndexOf("
")); } catch { ltd[2] = "不能正常显示...比如含有图片..."; } } return ltd; } }

谷歌GoogleSearch类

public partial class GoogleSearch : OpenSearchBase    {        protected override void Render(HtmlTextWriter writer)        {            //设置Cookie为utf-8            HttpCookie cookie = new HttpCookie("encoding", "utf-8");            Request.Cookies.Add(cookie);            //获取搜索词和搜索个数,并创建搜索地址URL            string searchTerm = base.SearchTerm;            if (string.IsNullOrEmpty(searchTerm)) return;            int count = base.Count;            string searchURL = string.Format("http://www.google.com.hk/search?hl=zh-cn&q={0}", searchTerm);            if (count != 0)            {                searchURL = searchURL + string.Format("&num={0}", count);            }            Response.ContentType = "text/xml";            //用HTMLTextWriter对象写出RSS文档            writer.Write(base.GetResultsXML(searchURL, searchTerm, "//li[@class='g']"));        }        //重写FindResultItems方法        public override string[] FindResultItems(string link, string title, string desc, HtmlNode subNode)        {            string[] ltd = new string[3];            ltd[0] = link;            ltd[1] = title;            ltd[2] = desc;            //Find the list that contains the result items            if (subNode.Name == "h3")            {                foreach (HtmlNode lineItemNode in subNode.ChildNodes)                {                    ltd[0] = lineItemNode.Attributes[0].Value;                    ltd[1] = lineItemNode.InnerText.ToString();                }            }            if (subNode.Name == "div")            {                string descHtml = subNode.InnerHtml;                try                {                    ltd[2] = descHtml.Substring(0, descHtml.IndexOf("
")); } catch { ltd[2] = "有图片,不能显示。。。"; } } return ltd; } }

 

转载于:https://www.cnblogs.com/alexjin/archive/2010/12/20/1911183.html

你可能感兴趣的文章
Elasticsearch 2.3 java api
查看>>
golang写入csv
查看>>
基础2
查看>>
java基础篇---网络编程(UDP程序设计)
查看>>
Kafka Producer相关代码分析【转】
查看>>
LeetCode 121. Best Time to Buy and Sell Stock
查看>>
麻省理工学院公开课-第四讲:快速排序 及 随机化 算法
查看>>
复杂表达式
查看>>
R12.1.3 & R12.2.X 注册客户化应用
查看>>
实验十七 线程同步控制
查看>>
SQL Server 触发器
查看>>
Ural 1146 Maximum Sum(DP)
查看>>
《STL源代码分析》---stl_stack.h读书笔记
查看>>
UVA 10385 - Duathlon(三分法)
查看>>
div同时使用两个class
查看>>
在路上,三线城市互联网创业记录
查看>>
spark 编译遇到的错误及解决办法(五)
查看>>
框架篇: React + React-Router + antd + nodejs + express框架开发运用(nodejs做前后端server)...
查看>>
8、使用转换流处理标准输入
查看>>
Git 常用命令
查看>>