获得Google PR值的PHP代码

  今天更新blog程序后,突然发现google工具条上的PR条增加了一点,不过一直以来Google工具条上的PR因为缓冲问题,使得当前显示的PR值并不一定是目前页面的PR值,因此去查了下,发现blog站点(http://mlsx.xplore.cn/)的PR值上升到了3,但是首页 (http://mlsx.xplore.cn)还是2。霍霍,庆贺一下。

  不过glemir今天上午告诉我他的blog早已经到了3,使我有点嫉妒,连带想起了Rachel的blog ,他们更新都没有我勤快,但是他们的PR基本上不必我差。由此我得出两个自我安慰的结论:

  1)Rachel的PR和我的一样,是因为他的游记日志受欢迎,我没有他的手笔。

  2)glemir的PR升的比我的快,那是因为他用了一个好blog程序--wordpress

  哈哈,自嘲一下。

  转入正题,贴上获得Google的PR值代码,声明不是我写的,只是修改,checksum的算法暂时还不知道。

  演示代码点击这里

  

复制代码 代码如下:

  <?php

  define('GOOGLE_MAGIC', 0xE6359A60);

  function zeroFill($a, $b)

  {

  $z = hexdec(80000000);

  if ($z & $a)

  {

  $a = ($a>>1);

  $a &= (~$z);

  $a |= 0x40000000;

  $a = ($a>>($b-1));

  }

  else

  {

  $a = ($a>>$b);

  }

  return $a;

  }

  function mix($a,$b,$c)

  {

  $a -= $b; $a -= $c; $a ^= (zeroFill($c,13));

  $b -= $c; $b -= $a; $b ^= ($a<<8);

  $c -= $a; $c -= $b; $c ^= (zeroFill($b,13));

  $a -= $b; $a -= $c; $a ^= (zeroFill($c,12));

  $b -= $c; $b -= $a; $b ^= ($a<<16);

  $c -= $a; $c -= $b; $c ^= (zeroFill($b,5));

  $a -= $b; $a -= $c; $a ^= (zeroFill($c,3));

  $b -= $c; $b -= $a; $b ^= ($a<<10);

  $c -= $a; $c -= $b; $c ^= (zeroFill($b,15));

  return array($a,$b,$c);

  }

  function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC)

  {

  if(is_null($length))

  {

  $length = sizeof($url);

  }

  $a = $b = 0x9E3779B9;

  $c = $init;

  $k = 0;

  $len = $length;

  while($len >= 12)

  {

  $a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24));

  $b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24));

  $c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24));

  $mix = mix($a,$b,$c);

  $a = $mix[0]; $b = $mix[1]; $c = $mix[2];

  $k += 12;

  $len -= 12;

  }

  $c += $length;

  switch($len)

  {

  case 11: $c+=($url[$k+10]<<24);

  case 10: $c+=($url[$k+9]<<16);

  case 9 : $c+=($url[$k+8]<<8);

  case 8 : $b+=($url[$k+7]<<24);

  case 7 : $b+=($url[$k+6]<<16);

  case 6 : $b+=($url[$k+5]<<8);

  case 5 : $b+=($url[$k+4]);

  case 4 : $a+=($url[$k+3]<<24);

  case 3 : $a+=($url[$k+2]<<16);

  case 2 : $a+=($url[$k+1]<<8);

  case 1 : $a+=($url[$k+0]);

  }

  $mix = mix($a,$b,$c);

  return $mix[2];

  }

  function strord($string) {

  for($i=0;$i<strlen($string);$i++) {

  $result[$i] = ord($string{$i});

  }

  return $result;

  }

  function ReadPR($link)

  {

  $fp = fsockopen ("www.google.com", 80, $errno, $errstr, 30);

  if (!$fp)

  {

  echo "$errstr ($errno)\n";

  exit(1);

  }

  else

  {

  $out = "GET $link HTTP/1.0\r\n";

  $out .= "Host: toolbarqueries.google.com\r\n";

  $out .= "User-Agent: Mozilla/4.0 (compatible; GoogleToolbar 2.0.114.9-big; Linux 2.6)\r\n";

  $out .= "Connection: Close\r\n\r\n";

  fwrite($fp, $out);

  do{

  $line = fgets($fp, 128);

  }while ($line !== "\r\n");

  $data = fread($fp,8192);

  fclose ($fp);

  return $data;

  }

  }

  function GetPR($url)

  {

  $url ='info:'.$url;

  $ch = GoogleCH(strord($url));

  $data = ReadPR("/search?client=navclient-auto&ch=6$ch&features=Rank&q=$url");

  $rankarray = explode (':', $data);

  return $rankarray[2];

  }

  if ( isset($_POST['url']) && $_POST['url'] !== '' )

  {

  echo 'PageRank: '.GetPR($_POST['url']);

  }

  ?>

  <html><title>Google PR值查询</title>

  <body>Google PR值查询 <a href='pr.phps' >获取源代码</a>

  <form action='' method='post'><br />

  URL:<input name='url' value='http://' type='text' size=40>

  <input name='submit' type='submit' value='Get PR'>

  </form></body></html>