获取 Google PR 代码

时间:2007/1/26 12:38:46      阅读:7095     附件: PRCrack.rar (经验值:0)     下载:30
      获取Google PR值一值都是从别人的网站上查到,在网上找了一个Google PageRank .net库 还有Checksum 算法源代码,帖上来共享一下(提供C#和VB.NET两个版本获取Google PR值源示,另附上Checksum 算法源代码),演示代码里已含有Google PageRank .net库,以下是运行效果图:


Checksum 算法源代码:
/// <summary>
/// PRCrack.dll库使用实例:
//得到Pagerank值
//Console.WriteLine(PRCrack.PageRank.CheckPR("http://www.google.com"));
//得到pagerank checksum
//Console.WriteLine(PRCrack.PageRank.OutputCheckSum("http://www.google.com",1));

//包含函数:
//输出指定网址的pagerank checksum
//参数m_Version指定1,表示得到新版本checksum,Google Toolbar版本>>=2.0.114
//参数m_Version指定0,表示得到老版本checksum,Google Toolbar版本<2.0.114
//public static string OutputCheckSum(string m_Url,int m_Version)

//输出制定网址的pagerank
//public static string CheckPR(string m_Url)


//Checksum 算法源代码请看详细内容
/// </summary>
namespace PRCrack
{
/// <summary>
/// Google PageRank的Checksum算法。
/// </summary>
class CheckSum
{
public CheckSum()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

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 + 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;
}
}
}

 
评论
  • Re:获取 Google PR 代码  (2007/3/14 16:05:36) by 张晓东 
    有Pagerank的源码吗?
  • Re:获取 Google PR 代码  (2007/6/12 11:58:06) by 闁亶鏆遍棃?Url=changqing.jobidc.com 
    好文章  谢谢了,又学到东西了
  • Re:获取 Google PR 代码  (2007/8/24 10:01:53) by James 
    好文章,学习了,虽然没有完全看懂
  • Re:获取 Google PR 代码  (2008/2/13 9:59:24) by wow 
    真的是非常感谢了,到处找PR的check sum算法。现在有现成的方便多了
  • Re:获取 Google PR 代码  (2008/2/19 9:43:50) by ouch 
     很不错的啊
标 题:
 
姓 名:
 
主 页:

验证码:

评论:
 

Because of the cache,you may see your comments several minutes later.