﻿# 取得 Google Page Rank 的方法 ( PHP Example )

這段程式碼是用 PHP 寫的，轉成 .NET 應該不難吧，如果有人轉成功記得告訴我一下。 ^^

<?php echo getrank($url,$dc); ?>

<?php  
// PHP Google PageRank Calculator Script  
// -------------------------- April 2005  
// Contact author: [pagerankscript@googlecommunity.com](mailto:pagerankscript@googlecommunity.com)

// for updates, visit:  
// [https://web.archive.org/web/20050114052406/http://www.googlecommunity.com/scripts/google-pagerank.php](https://web.archive.org/web/20050114052406/http://www.googlecommunity.com/scripts/google-pagerank.php)

// provided by www.GoogleCommunity.com  
//  an unofficial community of Google fans  
// ---------------------------------------

// Instructions  
//  Upload pagerank.php to your server  
//  Call it like this: http://www.example.com/pagerank.php?url=http://www.yahoo.com/  
//   example.com is your website. yahoo.com is the website to get the PR of  
//  The code below displays the PR for $url

/\*  
    This code is released unto the public domain  
\*/  
//header("Content-Type: text/plain; charset=utf-8");  
define('GOOGLE\_MAGIC', 0xE6359A60);

//unsigned shift right  
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)              /\* all the case statements fall through \*/  
    {  
        case 11: $c+=($url\[$k+10\]<<24);  
        case 10: $c+=($url\[$k+9\]<<16);  
        case 9 : $c+=($url\[$k+8\]<<8);  
          /\* the first byte of c is reserved for the length \*/  
        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\]);  
         /\* case 0: nothing left to add \*/  
    }  
    $mix = mix($a,$b,$c);  
    /\*-------------------------------------------- report the result \*/  
    return $mix\[2\];  
}

//converts a string into an array of integers containing the numeric value of the char  
function strord($string) {  
    for($i=0;$i<strlen($string);$i++) {  
        $result\[$i\] = ord($string{$i});  
    }  
    return $result;  
}

function getrank($url) {  
    $url = 'info:'.$url;  
    $ch = GoogleCH(strord($url));  
    $file = "[http://www.google.com/search?client=navclient-auto&ch=6$ch&features=Rank&q=$url](http://www.google.com/search?client=navclient-auto&ch=6$ch&features=Rank&q=$url)";  
    $data = file($file);  
    $rankarray = explode (':', $data\[2\]);  
    $rank = $rankarray\[2\];  
    return $rank;  
}

?>
