c#调用google pagerank类

using System;
using System.Collections.Generic;

using System.Web;

using System.IO;
using System.Net;
namespace Lee.WebMasterTool
{
    /// <summary>
    /// PageRank的查询类
    /// </summary>
    public class PageRank
    {
        /// <summary>
        /// 返回对应网站的PageRank
        /// </summary>
        /// <param name="strUrl">网站地址</param>
        /// <returns>PageRank</returns>
        public static int GetPageRank(string strUrl)
        {
            string responseFromServer = "";
            string strCh = CalculateChecksum(strUrl);
            try
            {
                HttpWebRequest HttpWReq = (HttpWebRequest)WebRequest.Create(@"http://www.google.cn/search?client=navclient-auto&features=Rank:&q=info:" + strUrl + "&ch=" + strCh);
                HttpWReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.5.21022)";
                HttpWReq.Accept = @"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml,   application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, */*";
                HttpWebResponse HttpWResp = (HttpWebResponse)HttpWReq.GetResponse();
                using (Stream dataStream = HttpWResp.GetResponseStream())
                {
                    using (StreamReader reader = new StreamReader(dataStream, System.Text.Encoding.GetEncoding("utf-8")))
                    {
                        responseFromServer = reader.ReadToEnd();
                    }
                }
                return Convert.ToInt16(responseFromServer.Substring(9, 1));
            }
            catch
            {
                return 0;
            }
        }

        #region Private Calculate Checksum
        /// <summary>
        /// 新算法,ToolBar 版本>>=2.0.114
        /// </summary>
        static 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);
        }
        /// <summary>
        /// 老算法,ToolBar 版本<2.0.114
        /// </summary>
        static string CalculateChecksumOld(string sURL)
        {
            uint ch = GoogleCH("info:" + sURL);
            string CalculateChecksum = "6" + Convert.ToString((ch));
            return CalculateChecksum;
        }

        static uint GOOGLE_MAGIC = 0xE6359A60;
        static 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;
        }
        static 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 };
        }
        static 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;
            /* all the case statements fall through */
            switch (len)
            {
                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];
        }
        static 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);
        }
        static uint GoogleCH(string sURL)
        {
            return GoogleCH(sURL, 0);
        }
        static uint GoogleCH(uint[] url, uint length)
        {
            return GoogleCH(url, length, GOOGLE_MAGIC);
        }
        static 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;
        }
        #endregion
    }
}


============================================================================

default.aspx.cs代码

using System;
using System.Collections.Generic;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

       
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        int intPageRank = Lee.WebMasterTool.PageRank.GetPageRank(txt_http.Text);
        ltl_pr.Text = "该网站的PR值为:" + intPageRank;
    }
}
===============================================================

default.aspx页面代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txt_http" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="查询PR值" οnclick="Button1_Click" />
       
       
    </div>
    <asp:Literal ID="ltl_pr" runat="server"></asp:Literal>
    </form>
</body>
</html>
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值