VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > C#教程 >
  • c#获取Google的PR代码

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  获取Google PR值一值都是从别人的网站上查到,在网上找了一个Google PageRank .net库 还有Checksum 算法源代码,帖上来共享一下(提供C#和VB.NET两个版本获取Google PR值源示,另附上Checksum 算法源代码),演示代码里已含有Google PageRank .net库,以下是运行效果图:

C#获取Google PR代码

  Checksum 算法源代码:

  使用实例:

//得到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 算法源代码请看详细内容
  using System;
  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;
  }
  }
  }



相关教程