更新时间:2010-8-18 9:58:00
using Systemusing System.Datausing System.Configurationusing System.Linqusing System.Webusing System.Xml.Linqusing System.Xmlusing System.Netusing System.Text.RegularExpressionsusing System.Textusing System.IO
namespace SEO{    public class SEOInfo    {        public int GetGoogleCount(string HostName)        {            try            {                string url = "http://www.google.com/search?hl=zh-CN&ie=UTF-8&q=site%3A" + HostName                string html = new WebClient().DownloadString(url)                //string pattern = @" 获得大约 <b>[\s\S]*?(?=</b> 条查询结果,以下是第 <b>)" 规则一                string pattern = @"</b> 获得约 <b>[\s\S]*?(?=</b> 条结果,以下是第 <b>)"                string number1 = Regex.Match(html, pattern, RegexOptions.IgnoreCase).Value                string lastnumber = number1.Replace(@"</b> 获得约 <b>", "")                lastnumber = lastnumber.Replace(",", "")                return Convert.ToInt32(lastnumber)            }            catch (Exception ex)            {                return 0            }        }        public int GetGoogleBackLinkCount(string HostName)        {            try            {                //http://www.google.cn/search?hl=zh-CN&q=link:www.yahoo.com                string url = "http://www.google.cn/search?hl=zh-CN&q=link:" + HostName                string html = new WebClient().DownloadString(url)                //string pattern = @"<p id=resultStats>&nbsp约有 <b>[\s\S]*?(?=</b> 条链接到 <b>" + HostName.Trim() + "</b> 的查询结果,以下是第)"                string pattern = @"<p id=resultStats>&nbsp约有 <b>[\s\S]*?(?=</b> 条链接到 <b>" + HostName.Trim() + "</b> 的结果,以下是第 <b>)"                string number1 = Regex.Match(html, pattern, RegexOptions.IgnoreCase).Value                string lastnumber = number1.Replace(@"<p id=resultStats>&nbsp约有 <b>", "")                lastnumber = lastnumber.Replace(",", "")                return Convert.ToInt32(lastnumber)            }            catch (Exception ex)            {                return 0            }
        }        /// <summary>返回百度:某期间,收录数量            /// 参数strTimespan代表意义            /// "1"请选择要查询近几天的收录量            /// "1"查询昨日收录情况            /// "7"查询最近1星期收录情况            ///"30"查询最近1月收录情况            ///"360"查询最近1年收录情况            ///"0"查询总的(所有日期)收录情况            /// </summary>            /// <param name="strHostName"></param>            /// <returns></returns>            public int GetBaiduCount(string strTimespan, string strHostName)        {            try            {                string uri = "http://www.baidu.com/s?lm=" + strTimespan + "&wd=site:" + strHostName                string html = new WebClient().DownloadString(uri)                string pattern = @"百度一下,找到相关网页[\s\S]*?(?=篇,用时)"                //string number = new Regex(@"找到相关网页约([\d,]+)篇").Match.Groups[1].Value                     string number1 = Regex.Match(html, pattern, RegexOptions.IgnoreCase).Value                string lastnumber = number1.Replace("百度一下,找到相关网页", "")                //如果有很多篇去掉约,返回纯数字串                    if (lastnumber.Contains("约"))                {                    lastnumber = lastnumber.Replace("约", "")                    lastnumber = lastnumber.Replace(",", "")                }                //如果一篇都没有返回0                    if (lastnumber == "")                {                    lastnumber = "0"                }                return Convert.ToInt32(lastnumber)            }            catch (Exception ex)            {                return 0            }        }        public int GetBaiduBackLinkCount(string DomainName)        {            try            {                // http://www.baidu.com/s?wd=domain:www.yahoo.com                string uri = "http://www.baidu.com/s?wd=domain:" + DomainName                string html = new WebClient().DownloadString(uri)                string pattern = @"百度一下,找到相关网页[\s\S]*?(?=篇,用时)"                string number1 = Regex.Match(html, pattern, RegexOptions.IgnoreCase).Value                string lastnumber = number1.Replace("百度一下,找到相关网页", "")                if (lastnumber.Contains("约"))                {                    lastnumber = lastnumber.Replace("约", "")                    lastnumber = lastnumber.Replace(",", "")                }                //如果一篇都没有返回0                    if (lastnumber == "")                {                    lastnumber = "0"                }                return Convert.ToInt32(lastnumber)            }                        catch (Exception ex)            {                return 0            }
        }
        public int GetYahooCount(string DomainName)        {            try            {                //http://www.yahoo.cn/s?p=site:www.yahoo.com
                string uri = "http://www.yahoo.cn/s?p=site:" + DomainName                WebClient wb = new WebClient()                byte[] PageDate = wb.DownloadData(uri)                string html = Encoding.UTF8.GetString(PageDate)                string pattern = @"<div class=""rltnum"">找到相关网页约[\s\S]*?(?=条,用时)"                string number1 = Regex.Match(html, pattern, RegexOptions.IgnoreCase).Value                string lastnumber = number1.Replace(@"<div class=""rltnum"">找到相关网页约", "")                lastnumber = lastnumber.Replace(",", "")                //如果一篇都没有返回0                    if (lastnumber == "")                {                    lastnumber = "0"                }                return Convert.ToInt32(lastnumber)            }            catch (Exception ex)            {                return 0            }        }        public int GetYahooBackLink(string DomainName)        {            try            {                //http://sitemap.cn.yahoo.com/search?bwm=i&bwmf=s&p=www.yahoo.com
                string uri = "http://sitemap.cn.yahoo.com/search?bwm=i&bwmf=s&p=" + DomainName
                WebClient wb = new WebClient()                byte[] PageDate = wb.DownloadData(uri)                string html = Encoding.UTF8.GetString(PageDate)                string pattern = @"<em>链向该地址的网页: 共 <strong>[\s\S]*?(?=</strong> 条  当前显示 第<strong>)"                string number1 = Regex.Match(html, pattern, RegexOptions.IgnoreCase).Value                string lastnumber = number1.Replace(@"<em>链向该地址的网页: 共 <strong>", "")                lastnumber = lastnumber.Replace(",", "")                //如果一篇都没有返回0                    if (lastnumber == "")                {                    lastnumber = "0"                }                return Convert.ToInt32(lastnumber)            }            catch (Exception ex)            {                return 0            }        }        public string GetAlexa(string _url)        {            string url            url = _url            try            {                XmlReader reader                XmlDocument doc = new XmlDocument()                XmlNode node                reader = XmlReader.Create("http://data.alexa.com/data/?cli=10&dat==snba&ver=7.0&url=" + url)                doc = new XmlDocument()                doc.Load(reader)                node = doc.SelectSingleNode("/ALEXA/SD/POPULARITY")                if (node != null)                {                    return node.Attributes["TEXT"].Value.ToString()                    reader.Close()                }                else                {                    return null                    reader.Close()                }            }            catch            {                return null            }            finally            {            }        }        //        /// <summary>        /// 获取GOOGLE PR的代码:GetGooglePR(string url)        /// </summary>        uint GOOGLE_MAGIC = 0xE6359A60
        private uint zeroFill(uint a, int b)        {            checked            {                uint z = 0x80000000                if (Convert.ToBoolean(z & a))                {                    a = (a >> 1)                    a &= (~z)                    a |= 0x40000000                    a = (a >> (b - 1))                }                else                {                    a = (a >> b)                }            }            return a        }
        private uint[] mix(uint a, uint b, uint c)        {            a -= b a -= c a ^= (uint)(zeroFill(c, 13))            b -= c b -= a b ^= (uint)(a << 8)            c -= a c -= b c ^= (uint)(zeroFill(b, 13))            a -= b a -= c a ^= (uint)(zeroFill(c, 12))            b -= c b -= a b ^= (uint)(a << 16)            c -= a c -= b c ^= (uint)(zeroFill(b, 5))            a -= b a -= c a ^= (uint)(zeroFill(c, 3))            b -= c b -= a b ^= (uint)(a << 10)            c -= a c -= b c ^= (uint)(zeroFill(b, 15))
            return new uint[3] { a, b, c }        }
        private uint GoogleCH(uint[] url, uint length, uint init)        {            if (length == 0)            {                length = (uint)url.Length            }            uint a, b            a = b = 0x9E3779B9            uint c = init            int k = 0            uint len = length            uint[] m_mix = new uint[3]            while (len >= 12)            {                a += (uint)(url[k + 0] + (url[k + 1] << 8) + (url[k + 2] << 16) + (url[k + 3] << 24))                b += (uint)(url[k + 4] + (url[k + 5] << 8) + (url[k + 6] << 16) + (url[k + 7] << 24))                c += (uint)(url[k + 8] + (url[k + 9] << 8) + (url[k + 10] << 16) + (url[k + 11] << 24))                m_mix = mix(a, b, c)                a = m_mix[0] b = m_mix[1] c = m_mix[2]
                k += 12                len -= 12            }
            c += length
            switch (len)              /* all the case statements fall through */            {                case 11:                    {                        c += (uint)(url[k + 10] << 24)                        c += (uint)(url[k + 9] << 16)                        c += (uint)(url[k + 8] << 8)                        b += (uint)(url[k + 7] << 24)                        b += (uint)(url[k + 6] << 16)                        b += (uint)(url[k + 5] << 8)                        b += (uint)(url[k + 4])                        a += (uint)(url[k + 3] << 24)                        a += (uint)(url[k + 2] << 16)                        a += (uint)(url[k + 1] << 8)                        a += (uint)(url[k + 0])                        break                    }                case 10:                    {                        c += (uint)(url[k + 9] << 16)                        c += (uint)(url[k + 8] << 8)                        b += (uint)(url[k + 7] << 24)                        b += (uint)(url[k + 6] << 16)                        b += (uint)(url[k + 5] << 8)                        b += (uint)(url[k + 4])                        a += (uint)(url[k + 3] << 24)                        a += (uint)(url[k + 2] << 16)                        a += (uint)(url[k + 1] << 8)                        a += (uint)(url[k + 0])                        break                    }                case 9:                    {                        c += (uint)(url[k + 8] << 8)                        b += (uint)(url[k + 7] << 24)                        b += (uint)(url[k + 6] << 16)                        b += (uint)(url[k + 5] << 8)                        b += (uint)(url[k + 4])                        a += (uint)(url[k + 3] << 24)                        a += (uint)(url[k + 2] << 16)                        a += (uint)(url[k + 1] << 8)                        a += (uint)(url[k + 0])                        break                    }                /* the first byte of c is reserved for the length */                case 8:                    {                        b += (uint)(url[k + 7] << 24)                        b += (uint)(url[k + 6] << 16)                        b += (uint)(url[k + 5] << 8)                        b += (uint)(url[k + 4])                        a += (uint)(url[k + 3] << 24)                        a += (uint)(url[k + 2] << 16)                        a += (uint)(url[k + 1] << 8)                        a += (uint)(url[k + 0])                        break                    }                case 7:                    {                        b += (uint)(url[k + 6] << 16)                        b += (uint)(url[k + 5] << 8)                        b += (uint)(url[k + 4])                        a += (uint)(url[k + 3] << 24)                        a += (uint)(url[k + 2] << 16)                        a += (uint)(url[k + 1] << 8)                        a += (uint)(url[k + 0])                        break                    }                case 6:                    {                        b += (uint)(url[k + 5] << 8)                        b += (uint)(url[k + 4])                        a += (uint)(url[k + 3] << 24)                        a += (uint)(url[k + 2] << 16)                        a += (uint)(url[k + 1] << 8)                        a += (uint)(url[k + 0])                        break                    }                case 5:                    {                        b += (uint)(url[k + 4])                        a += (uint)(url[k + 3] << 24)                        a += (uint)(url[k + 2] << 16)                        a += (uint)(url[k + 1] << 8)                        a += (uint)(url[k + 0])                        break                    }                case 4:                    {                        a += (uint)(url[k + 3] << 24)                        a += (uint)(url[k + 2] << 16)                        a += (uint)(url[k + 1] << 8)                        a += (uint)(url[k + 0])                        break                    }                case 3:                    {                        a += (uint)(url[k + 2] << 16)                        a += (uint)(url[k + 1] << 8)                        a += (uint)(url[k + 0])                        break                    }                case 2:                    {                        a += (uint)(url[k + 1] << 8)                        a += (uint)(url[k + 0])                        break                    }                case 1:                    {                        a += (uint)(url[k + 0])                        break                    }                /* case 0: nothing left to add */            }            m_mix = mix(a, b, c)            /* report the result */            return m_mix[2]        }
        private uint GoogleCH(string url, uint length)        {            uint[] m_urluint = new uint[url.Length]            for (int i = 0 i < url.Length i++)            {                m_urluint[i] = url[i]            }            return GoogleCH(m_urluint, length, GOOGLE_MAGIC)        }
        private uint GoogleCH(string sURL)        {            return GoogleCH(sURL, 0)        }        private uint GoogleCH(uint[] url, uint length)        {            return GoogleCH(url, length, GOOGLE_MAGIC)        }
        private uint[] c32to8bit(uint[] arr32)        {            uint[] arr8 = new uint[arr32.GetLength(0) * 4 + 3]
            for (int i = 0 i < arr32.GetLength(0) i++)            {                for (int bitOrder = i * 4 bitOrder <= i * 4 + 3 bitOrder++)                {                    arr8[bitOrder] = arr32[i] & 255                    arr32[i] = zeroFill(arr32[i], 8)                }            }            return arr8        }
        //新算法,ToolBar 版本>>=2.0.114        public string CalculateChecksum(string sURL)        {            uint ch = GoogleCH("info:" + sURL)
            ch = (((ch / 7) << 2) | (((uint)(ch % 13)) & 7))
            uint[] prbuf = new uint[20]            prbuf[0] = ch            for (int i = 1 i < 20 i++)            {                prbuf[i] = prbuf[i - 1] - 9            }            ch = GoogleCH(c32to8bit(prbuf), 80)
            return string.Format("6{0}", ch)        }
        //老算法,ToolBar 版本<2.0.114        public string CalculateChecksumOld(string sURL)        {            uint ch = GoogleCH("info:" + sURL)
            string CalculateChecksum = "6" + Convert.ToString((ch))            return CalculateChecksum        }        public string GetGooglePR(string url)        {            WebClient wc = null            try            {                wc = new WebClient()                string str = wc.DownloadString("http://www.google.cn/search?client=navclient-auto&ch=" + CalculateChecksum(url) + "&features=Rank"                    + "&q=info:" + url)                string[] rs = str.Split('':'')                string PR = rs[rs.Length - 1]                return PR                //PR = url+"Pr="+str+"<br>"            }            catch            {                return null            }            finally            {                wc.Dispose()            }        }        //获取GOOGLE PR的代码完毕    }}
本文中“西安百度推广,百度西安分公司”由 西安百度 陕西博德信息技术有限公司提供 【字体:大 中 小】【打印】【关闭】